security_check(); if ($resultat_session == 'c') { header("Location: ../utilisateurs/mon_compte.php?change_mdp=yes"); die(); } else if ($resultat_session == '0') { header("Location: ../logout.php?auto=1"); die(); } // Check access if (!checkAccess()) { header("Location: ../logout.php?auto=1"); die(); } $valid = isset($_POST["valid"]) ? $_POST["valid"] : 'no'; $id_info=isset($_POST['id_info']) ? $_POST['id_info'] : (isset($_GET['id_info']) ? $_GET['id_info'] : ''); $mode_auto=isset($_POST['mode_auto']) ? $_POST['mode_auto'] : (isset($_GET['mode_auto']) ? $_GET['mode_auto'] : 'n'); if((isset($_POST['mode']))&&($_POST['mode']=='suppr_assoc_doublon')) { check_token(); $msg=""; $suppr_assoc_doublon=isset($_POST['suppr_assoc_doublon']) ? $_POST['suppr_assoc_doublon'] : (isset($_GET['suppr_assoc_doublon']) ? $_GET['suppr_assoc_doublon'] : array()); $cpt_suppr=0; for($loop=0;$loop"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); if($suppr) { $cpt_suppr++; } else { $msg.="Erreur lors de la suppression de l'association ".$suppr_assoc_doublon[$loop]."
"; } } if($cpt_suppr>0) { $msg.=$cpt_suppr." association(s) supprimée(s).
"; } $mode=""; } $style_specifique[] = "lib/DHTMLcalendar/calendarstyle"; $javascript_specifique[] = "lib/DHTMLcalendar/calendar"; $javascript_specifique[] = "lib/DHTMLcalendar/lang/calendar-fr"; $javascript_specifique[] = "lib/DHTMLcalendar/calendar-setup"; //================================== // header $titre_page = "Vérification/nettoyage des tables de la base de données GEPI"; require_once("../lib/header.inc.php"); //================================== //====================================================== // Fonctions à utiliser... juste stockées ici pour le moment. function get_tab_utilisateurs_responsables_fantomes() { $retour=array(); $sql="select login from utilisateurs where statut='responsable' and login not in (select login from resp_pers);"; $res=mysqli_query($GLOBALS["mysqli"], $sq); if(mysqli_num_rows($res)>0) { while($lig=mysqli_fetch_object($res)) { $retour[]=$lig->login; } } return $retour; } function menage_utilisateurs_responsables() { $sql="delete from utilisateurs where statut='responsable' and login not in (select login from resp_pers);"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(!$res) { return false; } else { return true; } } function desactivation_utilisateurs_responsables_sans_eleve() { $sql="update utilisateurs set statut='inactif' where statut='responsable' and login not in (select login from resp_pers);"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(!$res) { return false; } else { return true; } } function desactivation_utilisateurs_responsables_sans_eleve_scolarise() { $sql="update utilisateurs set statut='inactif' where statut='responsable' and login in (SELECT rp.login FROM resp_pers rp, responsables2 r, eleves e WHERE rp.pers_id=r.pers_id AND r.ele_id=e.ele_id AND e.login NOT IN (SELECT login FROM j_eleves_classes));"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(!$res) { return false; } else { return true; } } function get_tab_utilisateurs_eleves_fantomes() { $retour=array(); $sql="select login from utilisateurs where statut='eleve' and login not in (select login from eleves);"; $res=mysqli_query($GLOBALS["mysqli"], $sq); if(mysqli_num_rows($res)>0) { while($lig=mysqli_fetch_object($res)) { $retour[]=$lig->login; } } return $retour; } function menage_utilisateurs_eleves() { $sql="delete from utilisateurs where statut='eleve' and login not in (select login from eleves);"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(!$res) { return false; } else { return true; } } //====================================================== //$total_etapes = 8; $total_etapes = 18; $duree = 8; if (!isset($_GET['cpt'])) { $cpt = 0; } else { $cpt = $_GET['cpt']; } $maj=isset($_POST['maj']) ? $_POST['maj'] : (isset($_GET['maj']) ? $_GET['maj'] : NULL); $stop=isset($_POST['stop']) ? $_POST['stop'] : (isset($_GET['stop']) ? $_GET['stop'] :'n'); //debug_var(); if((isset($maj))||(isset($_REQUEST['action']))) { check_token(); } /* //if (($_POST['maj'])=="9") { if ($maj=="9") { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables

\n"; } */ //debug_var(); function init_time() { global $TPSDEB,$TPSCOUR; list ($usec,$sec)=explode(" ",microtime()); $TPSDEB=$sec; $TPSCOUR=0; } function current_time() { global $TPSDEB,$TPSCOUR; list ($usec,$sec)=explode(" ",microtime()); $TPSFIN=$sec; if (round($TPSFIN-$TPSDEB,1)>=$TPSCOUR+1) //une seconde de plus { $TPSCOUR=round($TPSFIN-$TPSDEB,1); flush(); } } function get_id_infos_action_nettoyage() { global $id_info; if($id_info!='') { return $id_info; } else { return new_id_infos_action_nettoyage(); } } function new_id_infos_action_nettoyage() { //$id_info=""; $titre="Nettoyage des tables : ".strftime("%d/%m/%Y à %H:%M:%S"); $texte="Nettoyage des tables...
"; $destinataire="administrateur"; $mode="statut"; $id_info=enregistre_infos_actions($titre,$texte,$destinataire,$mode); return $id_info; } function update_infos_action_nettoyage($id_info, $texte) { $retour=""; $sql="SELECT description FROM infos_actions WHERE id='$id_info';"; //echo "$sql
\n"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)>0) { $lig=mysqli_fetch_object($res); //$sql="UPDATE infos_actions SET description='".addslashes($lig->description).addslashes($texte)."
' WHERE id='$id_info';"; $sql="UPDATE infos_actions SET description='".addslashes($lig->description).addslashes($texte)."' WHERE id='$id_info';"; //echo "$sql
\n"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(!$res) {$retour="ERREUR lors de la mise à jour de la description de l'information n°$id_info.";} } else { $retour="ERREUR : L'information n°$id_info n'existe pas."; } //echo $retour; return $retour; } function script_suite_submit() { global $mode_auto; $retour=""; if($mode_auto=='y') { $retour="\n"; } return $retour; } //function etape7() { function clean_table_matieres_appreciations() { global $id_info; global $TPSCOUR,$offset,$duree,$cpt,$nb_lignes; // Cas de la table matieres_appreciations $req = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM matieres_appreciations order by login,id_groupe,periode"); $nb_lignes = mysqli_num_rows($req); if ($offset >= $nb_lignes) { $offset = -1; return true; exit(); } $fin = ''; $cpt_2 = 0; while (($offset<$nb_lignes) and ($fin == '')) { $login_user = old_mysql_result($req,$offset,'login'); $id_groupe = old_mysql_result($req,$offset,'id_groupe'); $periode = old_mysql_result($req,$offset,'periode'); // Détection des doublons $req2 = mysqli_query($GLOBALS["mysqli"], "SELECT login FROM matieres_appreciations where login ='$login_user' and id_groupe ='$id_groupe' and periode ='$periode' "); $nb_lignes2 = mysqli_num_rows($req2); if ($nb_lignes2 > "1") { $nb = $nb_lignes2-1; //echo "Suppression d'un doublon : login = $login_user - identifiant matiere = $id_matiere - Numéro période = $periode
\n"; // On efface les lignes en trop $del = mysqli_query($GLOBALS["mysqli"], "delete from matieres_appreciations where login ='$login_user' and id_groupe ='$id_groupe' and periode ='$periode' LIMIT $nb"); $cpt++; $cpt_2++; } // Détection des données inutiles /* $test = mysql_query("select ma.login from matieres_appreciations ma, eleves e, j_eleves_classes jec, periodes p, matieres m, j_eleves_groupes jeg, groupes g where ma.login = '$login_user' and e.login = '$login_user' and jec.login = '$login_user' and jeg.login = '$login_user' and jec.id_classe = p.id_classe and jec.periode = '$periode' and p.num_periode = '$periode' and ma.periode = '$periode' and g.id = '$id_groupe' and jeg.id_groupe = '$id_groupe' "); */ $sql="select jec.login from j_eleves_classes jec, j_eleves_groupes jeg where jec.login = jeg.login AND jec.periode = jeg.periode AND jec.login='$login_user' and jec.periode = '$periode' and jeg.id_groupe = '$id_groupe' "; $test = mysqli_query($GLOBALS["mysqli"], $sql); //echo "$sql
\n"; $nb_lignes2 = mysqli_num_rows($test); if ($nb_lignes2 == "0") { //echo "Suppression d'une donnée orpheline : login = $login_user - identifiant matière = $id_matiere - Numéro période = $periode
\n"; // On efface les lignes en trop $del = mysqli_query($GLOBALS["mysqli"], "delete from matieres_appreciations where login ='$login_user' and id_groupe ='$id_groupe' and periode ='$periode'"); $cpt++; $cpt_2++; } // on regarde si l'élève suit l'option pour la période donnée. $test2 = mysqli_query($GLOBALS["mysqli"], "select login from j_eleves_groupes where login = '$login_user' and id_groupe = '$id_groupe' and periode = '$periode'"); $nb_lignes2 = mysqli_num_rows($test2); if ($nb_lignes2 == "0") { //echo "Suppression d'une donnée orpheline : login = $login_user - identifiant matière = $id_matiere - Numéro période = $periode
\n"; // On efface les lignes en trop $del = mysqli_query($GLOBALS["mysqli"], "delete from matieres_appreciations where login ='$login_user' and id_groupe ='$id_groupe' and periode ='$periode'"); } current_time(); if ($duree>0 and $TPSCOUR>=$duree) { //on atteint la fin du temps imparti $fin = 'yes'; } else { $offset++; } } $offset = $offset - $cpt_2; return true; } //function etape8() { function clean_table_matieres_notes($id_nettoyage=-1) { global $id_info; global $TPSCOUR,$offset,$duree,$cpt,$nb_lignes; // Cas de la table matieres_appreciations //$req = mysql_query("SELECT * FROM matieres_notes order by login,matiere,periode"); $req = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM matieres_notes order by login,id_groupe,periode"); $nb_lignes = mysqli_num_rows($req); if ($offset >= $nb_lignes) { $offset = -1; return true; exit(); } $fin = ''; $cpt_2 = 0; while (($offset<$nb_lignes) and ($fin == '')) { $login_user = old_mysql_result($req,$offset,'login'); $id_groupe = old_mysql_result($req,$offset,'id_groupe'); $periode = old_mysql_result($req,$offset,'periode'); // Détection des doublons $req2 = mysqli_query($GLOBALS["mysqli"], "SELECT login FROM matieres_notes where login ='$login_user' and id_groupe ='$id_groupe' and periode ='$periode' "); $nb_lignes2 = mysqli_num_rows($req2); if ($nb_lignes2 > "1") { $nb = $nb_lignes2-1; //echo "Suppression d'un doublon : login = $login_user - identifiant matiere = $id_matiere - Numéro période = $periode
\n"; // On efface les lignes en trop $del = mysqli_query($GLOBALS["mysqli"], "delete from matieres_notes where login ='$login_user' and id_groupe ='$id_groupe' and periode ='$periode' LIMIT $nb"); $cpt++; $cpt_2++; } // Détection des lignes inutiles /* $test = mysql_query("select mn.login from matieres_notes mn, eleves e, j_eleves_classes jec, periodes p, groupes g, j_eleves_groupes jeg where mn.login = '$login_user' and e.login = '$login_user' and jec.login = '$login_user' and jec.id_classe = p.id_classe and jec.periode = '$periode' and p.num_periode = '$periode' and mn.periode = '$periode' and g.id = '$id_groupe' "); */ $sql="select jec.login from j_eleves_classes jec, j_eleves_groupes jeg where jec.login = jeg.login AND jec.periode = jeg.periode AND jec.login='$login_user' and jec.periode = '$periode' and jeg.id_groupe = '$id_groupe' "; $test = mysqli_query($GLOBALS["mysqli"], $sql); //echo "$sql
\n"; $nb_lignes2 = mysqli_num_rows($test); if ($nb_lignes2 == "0") { //echo "Suppression d'une donnée orpheline : login = $login_user - identifiant matière = $id_matiere - Numéro période = $periode
\n"; // On efface les lignes en trop $del = mysqli_query($GLOBALS["mysqli"], "delete from matieres_notes where login ='$login_user' and id_groupe ='$id_groupe' and periode ='$periode'"); $cpt++; $cpt_2++; } // on regarde si l'élève suit l'option pour la période donnée. $test2 = mysqli_query($GLOBALS["mysqli"], "select login from j_eleves_groupes where login = '$login_user' and id_groupe = '$id_groupe' and periode = '$periode'"); $nb_lignes2 = mysqli_num_rows($test2); if ($nb_lignes2 == "0") { //echo "Suppression d'une donnée orpheline : login = $login_user - identifiant matière = $id_matiere - Numéro période = $periode
\n"; // On efface les lignes en trop $del = mysqli_query($GLOBALS["mysqli"], "delete from matieres_notes where login ='$login_user' and id_groupe ='$id_groupe' and periode ='$periode'"); $cpt++; $cpt_2++; } current_time(); if ($duree>0 and $TPSCOUR>=$duree) { //on atteint la fin du temps imparti $fin = 'yes'; } else { $offset++; } } $offset = $offset - $cpt_2; return true; } // Etape 1 function clean_tables_aid_et_autres() { global $id_info; $retour=""; $tab["j_aid_eleves"][0] = "aid"; //1ère table $tab["j_aid_eleves"][1] = "eleves"; // 2ème table $tab["j_aid_eleves"][2] = "id_aid"; // nom du champ de la table de liaison lié à la première table $tab["j_aid_eleves"][3] = "login"; // nom du champ de la table de liaison lié à la deuxième table $tab["j_aid_eleves"][4] = "id"; // nom du champ de la première table lié à la table de liaison $tab["j_aid_eleves"][5] = "login"; // nom du champ de la deuxième table lié à la table de liaison $tab["j_aid_eleves_resp"][0] = "aid"; //1ère table $tab["j_aid_eleves_resp"][1] = "eleves"; // 2ème table $tab["j_aid_eleves_resp"][2] = "id_aid"; // nom du champ de la table de liaison lié à la première table $tab["j_aid_eleves_resp"][3] = "login"; // nom du champ de la table de liaison lié à la deuxième table $tab["j_aid_eleves_resp"][4] = "id"; // nom du champ de la première table lié à la table de liaison $tab["j_aid_eleves_resp"][5] = "login"; // nom du champ de la deuxième table lié à la table de liaison $tab["j_aid_utilisateurs"][0] = "aid"; //1ère table $tab["j_aid_utilisateurs"][1] = "utilisateurs"; // 2ème table $tab["j_aid_utilisateurs"][2] = "id_aid"; // nom du champ de la table de liaison lié à la première table $tab["j_aid_utilisateurs"][3] = "id_utilisateur"; // nom du champ de la table de liaison lié à la deuxième table $tab["j_aid_utilisateurs"][4] = "id"; // nom du champ de la première table lié à la table de liaison $tab["j_aid_utilisateurs"][5] = "login"; // nom du champ de la deuxième table lié à la table de liaison if (getSettingValue("active_mod_gest_aid")=="y") { $tab["j_aid_utilisateurs_gest"][0] = "aid"; //1ère table $tab["j_aid_utilisateurs_gest"][1] = "utilisateurs"; // 2ème table $tab["j_aid_utilisateurs_gest"][2] = "id_aid"; // nom du champ de la table de liaison lié à la première table $tab["j_aid_utilisateurs_gest"][3] = "id_utilisateur"; // nom du champ de la table de liaison lié à la deuxième table $tab["j_aid_utilisateurs_gest"][4] = "id"; // nom du champ de la première table lié à la table de liaison $tab["j_aid_utilisateurs_gest"][5] = "login"; // nom du champ de la deuxième table lié à la table de liaison $tab["j_aidcateg_super_gestionnaires"][0] = "aid_config"; //1ère table $tab["j_aidcateg_super_gestionnaires"][1] = "utilisateurs"; // 2ème table $tab["j_aidcateg_super_gestionnaires"][2] = "indice_aid"; // nom du champ de la table de liaison lié à la première table $tab["j_aidcateg_super_gestionnaires"][3] = "id_utilisateur"; // nom du champ de la table de liaison lié à la deuxième table $tab["j_aidcateg_super_gestionnaires"][4] = "indice_aid"; // nom du champ de la première table lié à la table de liaison $tab["j_aidcateg_super_gestionnaires"][5] = "login"; // nom du champ de la deuxième table lié à la table de liaison } $tab["j_aidcateg_utilisateurs"][0] = "aid_config"; //1ère table $tab["j_aidcateg_utilisateurs"][1] = "utilisateurs"; // 2ème table $tab["j_aidcateg_utilisateurs"][2] = "indice_aid"; // nom du champ de la table de liaison lié à la première table $tab["j_aidcateg_utilisateurs"][3] = "id_utilisateur"; // nom du champ de la table de liaison lié à la deuxième table $tab["j_aidcateg_utilisateurs"][4] = "indice_aid"; // nom du champ de la première table lié à la table de liaison $tab["j_aidcateg_utilisateurs"][5] = "login"; // nom du champ de la deuxième table lié à la table de liaison $tab["j_eleves_etablissements"][0] = "eleves"; //1ère table $tab["j_eleves_etablissements"][1] = "etablissements"; // 2ème table $tab["j_eleves_etablissements"][2] = "id_eleve"; // nom du champ de la table de liaison lié à la première table $tab["j_eleves_etablissements"][3] = "id_etablissement"; // nom du champ de la table de liaison lié à la deuxième table //$tab["j_eleves_etablissements"][4] = "login"; // nom du champ de la première table lié à la table de liaison $tab["j_eleves_etablissements"][4] = "elenoet"; // nom du champ de la première table lié à la table de liaison $tab["j_eleves_etablissements"][5] = "id"; // nom du champ de la deuxième table lié à la table de liaison $tab["j_eleves_regime"][0] = "eleves"; //1ère table $tab["j_eleves_regime"][1] = "eleves"; // 2ème table $tab["j_eleves_regime"][2] = "login"; // nom du champ de la table de liaison lié à la première table $tab["j_eleves_regime"][3] = "login"; // nom du champ de la table de liaison lié à la deuxième table $tab["j_eleves_regime"][4] = "login"; // nom du champ de la première table lié à la table de liaison $tab["j_eleves_regime"][5] = "login"; // nom du champ de la deuxième table lié à la table de liaison $tab["j_professeurs_matieres"][0] = "utilisateurs"; //1ère table $tab["j_professeurs_matieres"][1] = "matieres"; // 2ème table $tab["j_professeurs_matieres"][2] = "id_professeur"; // nom du champ de la table de liaison lié à la première table $tab["j_professeurs_matieres"][3] = "id_matiere"; // nom du champ de la table de liaison lié à la deuxième table $tab["j_professeurs_matieres"][4] = "login"; // nom du champ de la première table lié à la table de liaison $tab["j_professeurs_matieres"][5] = "matiere"; // nom du champ de la deuxième table lié à la table de liaison foreach ($tab as $key => $val) { $cpt=0; $retour.="

Vérification de la table ".$key."

\n"; // $key : le nom de la table de liaison // $val[0] : le nom de la première table // $val[1] : le nom de la deuxième table // etc... $req = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM $key order by $val[2],$val[3]"); $nb_lignes = mysqli_num_rows($req); $i = 0; $affiche = 'yes'; while ($i < $nb_lignes) { $temp1 = old_mysql_result($req,$i,$val[2]); $temp2 = old_mysql_result($req,$i,$val[3]); $req2 = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM $key j, $val[0] t1, $val[1] t2 where j.$val[2]=t1.$val[4] and j.$val[3]=t2.$val[5] and j.$val[2]='$temp1' and j.$val[3]='$temp2' "); $nb_lignes2 = mysqli_num_rows($req2); // suppression des doublons if ($nb_lignes2 > "1") { $nb = $nb_lignes2-1; // cas j_aid_eleves et j_aid_utilisateurs if (($key == "j_aid_eleves") or ($key == "j_aid_utilisateurs") or ($key == "j_aid_eleves_resp") or ($key == "j_aid_utilisateurs_gest")) { $indice_aid = old_mysql_result($req,$i,'indice_aid'); $test = sql_query1("select a.indice_aid from aid_config ac, aid a where ac.indice_aid ='$indice_aid' and a.id = '$temp1'and a.indice_aid = '$indice_aid' "); if ($test == "-1") { //echo "Suppression d'un doublon : $temp1 - $temp2
\n"; $del = mysqli_query($GLOBALS["mysqli"], "delete from $key where ($val[2]='$temp1' and $val[3]='$temp2' and indice_aid='$indice_aid')"); $cpt++; } // autres cas } else { //echo "Suppression d'un doublon : $temp1 - $temp2
\n"; $del = mysqli_query($GLOBALS["mysqli"], "delete from $key where ($val[2]='$temp1' and $val[3]='$temp2') LIMIT $nb"); $cpt++; } } // On supprime les lignes inutiles if ($nb_lignes2 == "0") { //echo "Suppression d'une ligne inutile : $temp1 - $temp2
\n"; $del = mysqli_query($GLOBALS["mysqli"], "delete from $key where $val[2]='$temp1' and $val[3]='$temp2'"); $cpt++; } $i++; } if ($cpt != 0) { $retour.="Nombre de lignes supprimées : ".$cpt."
\n"; } else { $retour.="Aucune ligne n'a été supprimée.
\n"; } if($key=='j_professeurs_matieres') { // Le test plus haut ne fonctionne pas completement: s'il y a eu des collisions de logins (?) d'une année sur l'autre, et des tables non nettoyées, on peut se retrouver avec un login attribué à un parent alors que c'était le login d'un prof l'année précédente... et si j_professeurs_matieres n'a pas été nettoyée, on se retrouve avec un parent d'élève proposé comme professeur lors de l'ajout d'enseignement //$sql="select * from j_professeurs_matieres j, resp_pers rp where rp.login=j.id_professeur AND j.id_professeur not in (select login from utilisateurs where statut='professeur');"; $sql="SELECT * FROM j_professeurs_matieres j WHERE j.id_professeur NOT IN (SELECT login FROM utilisateurs WHERE statut='professeur');"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { $sql="DELETE FROM j_professeurs_matieres WHERE id_professeur NOT IN (SELECT login FROM utilisateurs WHERE statut='professeur');"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) {$retour.="Suppression de ".mysqli_num_rows($test)." enregistrements supplémentaires.
\n";} } } $retour.="La table $key est OK.
\n"; } return $retour; } // Etape 2 function clean_table_j_eleves_professeurs() { global $id_info; global $cpt; $retour=""; // cas j_eleves_professeurs $retour.="

Vérification de la table j_eleves_professeurs

\n"; $req = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM j_eleves_professeurs order by login,professeur,id_classe"); $nb_lignes = mysqli_num_rows($req); $i = 0; while ($i < $nb_lignes) { $login_user = old_mysql_result($req,$i,'login'); $professeur = old_mysql_result($req,$i,'professeur'); $id_classe = old_mysql_result($req,$i,'id_classe'); // Détection des doublons $req2 = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM j_eleves_professeurs where login ='$login_user' and professeur ='$professeur' and id_classe ='$id_classe' "); $nb_lignes2 = mysqli_num_rows($req2); if ($nb_lignes2 > "1") { $nb = $nb_lignes2-1; //$retour.="Suppression d'un doublon : identifiant élève : $login_user - identifiant professeur = $professeur - identifiant classe = $id_classe
\n"; // On efface les lignes en trop $del = mysqli_query($GLOBALS["mysqli"], "delete from j_eleves_professeurs where login ='$login_user' and professeur ='$professeur' and id_classe ='$id_classe' LIMIT $nb"); $cpt++; } // Détection des lignes inutiles $req3 = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM j_eleves_professeurs j, eleves e, utilisateurs u, j_eleves_classes jec, j_groupes_classes jgc, j_groupes_professeurs jgp where j.login ='$login_user' and e.login ='$login_user' and jec.login = '$login_user' and jec.id_classe = '$id_classe' and j.professeur ='$professeur' and u.login ='$professeur' and jgp.login = '$professeur' and jgc.id_classe = '$id_classe' and jgp.id_groupe = jgc.id_groupe and j.id_classe ='$id_classe' "); $nb_lignes3 = mysqli_num_rows($req3); if ($nb_lignes3 == "0") { $nb = $nb_lignes2-1; //$retour.="Suppression d'une ligne inutile : identifiant élève : $login_user - identifiant professeur = $professeur - identifiant classe = $id_classe
\n"; // On efface les lignes en trop $del = mysqli_query($GLOBALS["mysqli"], "delete from j_eleves_professeurs where login ='$login_user' and professeur ='$professeur' and id_classe ='$id_classe'"); $cpt++; } ((mysqli_free_result($req2) || (is_object($req2) && (get_class($req2) == "mysqli_result"))) ? true : false); ((mysqli_free_result($req3) || (is_object($req3) && (get_class($req3) == "mysqli_result"))) ? true : false); $i++; } if ($cpt != 0) { $retour.="Nombre de lignes supprimées : ".$cpt."
\n"; } else { $retour.="Aucune ligne n'a été supprimée.
\n"; } $retour.="La table j_eleves_professeurs est OK.
\n"; return $retour; } // Etape 4 function clean_table_j_eleves_classes() { global $id_info; global $cpt; $retour=""; // Vérification de la table j_eleves_classes $retour.="

Vérification de la table j_eleves_classes

\n"; $req = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM j_eleves_classes"); $nb_lignes = mysqli_num_rows($req); $i = 0; while ($i < $nb_lignes) { $login_user = old_mysql_result($req,$i,'login'); $id_classe = old_mysql_result($req,$i,'id_classe'); $periode = old_mysql_result($req,$i,'periode'); // Détection des doublons $req2 = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM j_eleves_classes where login ='$login_user' and id_classe ='$id_classe' and periode ='$periode' "); $nb_lignes2 = mysqli_num_rows($req2); if ($nb_lignes2 > "1") { $nb = $nb_lignes2-1; //$retour.="Suppression d'un doublon : login = $login_user - identifiant classe = $id_classe - Numéro période = $periode
\n"; // On efface les lignes en trop $del = mysqli_query($GLOBALS["mysqli"], "delete from j_eleves_classes where login ='$login_user' and id_classe ='$id_classe' and periode ='$periode' LIMIT $nb"); $cpt++; } // Détection des lignes inutiles $req3 = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM j_eleves_classes j, eleves e, classes c, periodes p where j.login ='$login_user' and j.id_classe ='$id_classe' and j.periode ='$periode' and e.login ='$login_user' and c.id ='$id_classe' and p.num_periode ='$periode' and p.id_classe = '$id_classe' "); $nb_lignes3 = mysqli_num_rows($req3); if ($nb_lignes3 == "0") { $nb = $nb_lignes2-1; //$retour.="Suppression d'une ligne inutile : login = $login_user - identifiant classe = $id_classe - Numéro période = $periode
\n"; // On efface les lignes en trop $del = mysqli_query($GLOBALS["mysqli"], "delete from j_eleves_classes where login ='$login_user' and id_classe ='$id_classe' and periode ='$periode'"); $cpt++; } ((mysqli_free_result($req2) || (is_object($req2) && (get_class($req2) == "mysqli_result"))) ? true : false); ((mysqli_free_result($req3) || (is_object($req3) && (get_class($req3) == "mysqli_result"))) ? true : false); $i++; } if ($cpt != 0) { $retour.="Nombre de lignes supprimées : ".$cpt."
\n"; } else { $retour.="Aucune ligne n'a été supprimée.
\n"; } $retour.="La table j_eleves_classes est OK.
\n"; return $retour; } // Etape 6 function clean_tables_aid_appreciations_et_avis_conseil_classe() { global $id_info; global $cpt; $retour=""; // Cas de la table aid_appreciations $retour.="

Nettoyage de la table aid_appreciations (tables des appréciations AID)

\n"; $req = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM aid_appreciations order by login,id_aid,periode"); $nb_lignes = mysqli_num_rows($req); $i = 0; while ($i < $nb_lignes) { $login_user = old_mysql_result($req,$i,'login'); $id_aid = old_mysql_result($req,$i,'id_aid'); $periode = old_mysql_result($req,$i,'periode'); $test = mysqli_query($GLOBALS["mysqli"], "select aa.login from aid_appreciations aa, eleves e, j_eleves_classes jec, periodes p, aid a, j_aid_eleves jae where aa.login = '$login_user' and e.login = '$login_user' and jec.login = '$login_user' and jec.id_classe = p.id_classe and jec.periode = '$periode' and p.num_periode = '$periode' and aa.periode = '$periode' and aa.id_aid = '$id_aid' and a.id = '$id_aid' and jae.login = '$login_user' and jae.id_aid = '$id_aid' "); $nb_lignes2 = mysqli_num_rows($test); if ($nb_lignes2 == "0") { //$retour.="Suppression d'une donnée orpheline : login = $login_user - identifiant aid = $id_aid - Numéro période = $periode
\n"; // On efface les lignes en trop $del = mysqli_query($GLOBALS["mysqli"], "delete from aid_appreciations where login ='$login_user' and id_aid ='$id_aid' and periode ='$periode'"); $cpt++; } ((mysqli_free_result($test) || (is_object($test) && (get_class($test) == "mysqli_result"))) ? true : false); $i++; } if ($cpt != 0) { $retour.="Nombre de lignes supprimées : ".$cpt."
\n"; } else { $retour.="Aucune ligne n'a été supprimée.
\n"; } $retour.="La table aid_appreciations est OK.
\n"; // Cas de la table avis_conseil_classe $retour.="

Nettoyage de la table avis_conseil_classe (tables des avis du conseil de classe)

\n"; $req = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM avis_conseil_classe order by login,periode"); $nb_lignes = mysqli_num_rows($req); $i = 0; while ($i < $nb_lignes) { $login_user = old_mysql_result($req,$i,'login'); $periode = old_mysql_result($req,$i,'periode'); $test = mysqli_query($GLOBALS["mysqli"], "select acc.login from avis_conseil_classe acc, eleves e, j_eleves_classes jec, periodes p where acc.login = '$login_user' and e.login = '$login_user' and jec.login = '$login_user' and jec.id_classe = p.id_classe and jec.periode = '$periode' and p.num_periode = '$periode' and acc.periode = '$periode' "); $nb_lignes2 = mysqli_num_rows($test); if ($nb_lignes2 == "0") { //$retour.="Suppression d'une donnée orpheline : login = $login_user - Numéro période = $periode
\n"; // On efface les lignes en trop $del = mysqli_query($GLOBALS["mysqli"], "delete from avis_conseil_classe where login ='$login_user' and periode ='$periode'"); $cpt++; } ((mysqli_free_result($test) || (is_object($test) && (get_class($test) == "mysqli_result"))) ? true : false); $i++; } $retour.="La table avis_conseil_classe est OK.
\n"; return $retour; } // Etape XXX function clean_table_XXX() { global $id_info; $retour=""; return $retour; } // Voir s'il y a d'autres POST correspondant à des nettoyages lancés if(isset($_POST['maj'])) { $id_info=get_id_infos_action_nettoyage(); } if ((isset($_POST['maj']) and (($_POST['maj'])=="1"))||(isset($_GET['maj']) and (($_GET['maj'])=="1"))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Etape 1/$total_etapes

\n"; $retour=clean_tables_aid_et_autres(); update_infos_action_nettoyage($id_info, $retour); echo $retour; echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo script_suite_submit(); } else if ((isset($_POST['maj']) and (($_POST['maj'])=="2"))||(isset($_GET['maj']) and (($_GET['maj'])=="2"))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Etape 2/$total_etapes

\n"; $retour=clean_table_j_eleves_professeurs(); update_infos_action_nettoyage($id_info, $retour); echo $retour; echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo script_suite_submit(); } else if ((isset($_POST['maj']) and (($_POST['maj'])=="3"))||(isset($_GET['maj']) and (($_GET['maj'])=="3"))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Etape 3/$total_etapes

\n"; // Cas de la table j_classes_matieres_professeurs echo "

Vérification de la table j_classes_matieres_professeurs

\n"; echo "

La table j_classes_matieres_professeurs n'existe plus et ne peut donc pas être nettoyée. Cette étape est remplacée plus loin par un nettoyage des tables de gestion des groupes.

\n"; echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo script_suite_submit(); } else if ((isset($_POST['maj']) and (($_POST['maj'])=="4"))||(isset($_GET['maj']) and (($_GET['maj'])=="4"))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Etape 4/$total_etapes

\n"; $retour=clean_table_j_eleves_classes(); update_infos_action_nettoyage($id_info, $retour); echo $retour; echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
Attention : l'étape suivante peut être très longue.
\n"; echo "
\n"; echo script_suite_submit(); } else if ((isset($_POST['maj']) and (($_POST['maj'])=="5")) or (isset($_GET['maj']) and (($_GET['maj'])=="5"))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Etape 5/$total_etapes

\n"; echo "

Nettoyage de la table j_eleves_matieres

\n"; echo "

Cette table n'est plus utilisée. Cette étape a été remplacée plus loin par une étape de nettoyage des attributions d'élèves aux groupes...

\n"; echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo script_suite_submit(); //} } else if ((isset($_POST['maj']) and (($_POST['maj'])=="6"))||(isset($_GET['maj']) and (($_GET['maj'])=="6"))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Etape 6/$total_etapes

\n"; $retour=clean_tables_aid_appreciations_et_avis_conseil_classe(); update_infos_action_nettoyage($id_info, $retour); echo $retour; echo "
\n"; echo add_token_field(); echo "\n"; //echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
Attention : l'étape suivante peut être très longue.
\n"; echo "
\n"; echo script_suite_submit(); } else if ((isset($_POST['maj']) and (($_POST['maj'])=="7")) or (isset($_GET['maj']) and (($_GET['maj'])=="7"))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Etape 7/$total_etapes

\n"; echo "

Nettoyage de la table matieres_appreciations (tables des appréciations par discipline)

\n"; init_time(); //initialise le temps //début de fichier if (!isset($_GET["offset"])) { $offset=0; $texte_info_action="

Nettoyage de la table matieres_appreciations (tables des appréciations par discipline)

\n"; update_infos_action_nettoyage($id_info, $texte_info_action); } else { $offset=$_GET["offset"]; } if (!isset($_GET['nb_lignes'])) { $req = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM matieres_appreciations order by login,id_groupe,periode"); $nb_lignes = mysqli_num_rows($req); } else { $nb_lignes = $_GET['nb_lignes']; } if(isset($offset)){ if (($offset>=0)&&($nb_lignes>0)) { $percent=min(100,round(100*$offset/$nb_lignes,0)); } else {$percent=100;} } else {$percent=0;} if ($percent >= 0) { $percentwitdh=$percent*4; echo "
Nettoyage en cours

Progression ".$percent."%
 
\n"; } flush(); if ($offset>=0){ //if (etape7()) { if (clean_table_matieres_appreciations()) { echo "
Redirection automatique sinon cliquez ici\n"; echo "\n"; flush(); exit; } } else { if ($cpt != 0) { $texte_info_action="Nombre de lignes supprimées : ".$cpt."
\n"; $texte_info_action.="La table matieres_appreciations est OK.
\n"; } else { $texte_info_action="Aucune ligne n'a été supprimée.
\n"; $texte_info_action.="La table matieres_appreciations est OK.
\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
Attention : l'étape suivante peut être très longue.
\n"; echo "
\n"; echo script_suite_submit(); // Enregistrer le bilan et passer à la suite... via javascript } } else if ((isset($_POST['maj']) and (($_POST['maj'])=="8")) or (isset($_GET['maj']) and (($_GET['maj'])=="8"))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Etape 8/$total_etapes

\n"; echo "

Nettoyage de la table matieres_notes (tables des notes par discipline)

\n"; init_time(); //initialise le temps //début de fichier if (!isset($_GET["offset"])) { $offset=0; $texte_info_action="

Nettoyage de la table matieres_notes (tables des notes par discipline)

\n"; update_infos_action_nettoyage($id_info, $texte_info_action); } else { $offset=$_GET["offset"]; } if (!isset($_GET['nb_lignes'])) { $req = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM matieres_notes order by login,id_groupe,periode"); $nb_lignes = mysqli_num_rows($req); } else { $nb_lignes = $_GET['nb_lignes']; } if(isset($offset)){ if (($offset>=0)&&($nb_lignes>0)) { $percent=min(100,round(100*$offset/$nb_lignes,0)); } else {$percent=100;} } else {$percent=0;} if ($percent >= 0) { $percentwitdh=$percent*4; echo "
Nettoyage en cours

Progression ".$percent."%
 
\n"; } flush(); if ($offset>=0){ //if (etape8()) { if (clean_table_matieres_notes()) { echo "
Redirection automatique sinon cliquez ici\n"; echo "\n"; flush(); exit; } } else { if ($cpt != 0) { $texte_info_action="Nombre de lignes supprimées : ".$cpt."
\n"; $texte_info_action.="La table matieres_notes est OK.
\n"; } else { $texte_info_action="Aucune ligne n'a été supprimée.
\n"; $texte_info_action.="La table matieres_notes est OK.
\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); //echo "

Fin de la vérification des tables

\n"; echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "
\n"; //echo "
Attention : l'étape suivante peut être très longue.
\n"; echo "
\n"; echo script_suite_submit(); } } elseif ((isset($_POST['maj']) and (($_POST['maj'])=="9")) or (isset($_GET['maj']) and (($_GET['maj'])=="9"))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Etape 9/$total_etapes

\n"; //echo "

Retour à Outils de gestion | Retour à Vérification/nettoyage des tables

\n"; $temoin_aberrations_groupes=0; $table=array('j_signalement', 'j_groupes_classes','j_groupes_matieres','j_groupes_professeurs','j_eleves_groupes', 'j_groupes_visibilite', 'acces_cdt_groupes'); if(!isset($_POST['nettoyage_grp'])) { $texte_info_action="

Nettoyage des aberrations sur les groupes

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); // Aucun groupe non associé à une matière ou à une classe ne doit exister $sql="select g.* from groupes g left join j_groupes_classes jgc on jgc.id_groupe=g.id where jgc.id_groupe is NULL;"; $res_grp2=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_grp2)>0){ $texte_info_action="

Un ou des groupes existent sans être associés à aucune classe.
C'est une anomalie.
En voici la liste :
\n"; while($ligne=mysqli_fetch_object($res_grp2)) { $texte_info_action.="Suppression du groupe n°$ligne->id : $ligne->name ($ligne->description) : "; //$sql="DELETE from groupes WHERE id='$ligne->id';"; //echo "$sql
"; //$menage=mysql_query($sql); $menage=delete_group($ligne->id); if($menage) { $texte_info_action.="SUCCES"; } else { $texte_info_action.="ECHEC"; } $texte_info_action.="
\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } $sql="select g.* from groupes g left join j_groupes_matieres jgm on jgm.id_groupe=g.id where jgm.id_groupe is NULL;"; $res_grp2=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_grp2)>0){ $texte_info_action="

Un ou des groupes existent sans être associés à aucune matière.
C'est une anomalie.
En voici la liste :
\n"; while($ligne=mysqli_fetch_object($res_grp2)) { $texte_info_action.="Suppression du groupe n°$ligne->id : $ligne->name ($ligne->description) : "; //$sql="DELETE from groupes WHERE id='$ligne->id';"; //echo "$sql
"; //$menage=mysql_query($sql); $menage=delete_group($ligne->id); if($menage) { $texte_info_action.="SUCCES"; } else { $texte_info_action.="ECHEC"; } $texte_info_action.="
\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } // On va supprimer des tables 'j_signalement', 'j_groupes_classes','j_groupes_matieres','j_groupes_professeurs','j_eleves_groupes', 'j_groupes_visibilite', 'acces_cdt_groupes', les groupes qui ne sont pas dans la table 'groupes' for($i=0;$i"; $res_grp1=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_grp1)>0){ //echo "

On parcourt la table '".$table[$i]."'.

\n"; while($ligne=mysqli_fetch_array($res_grp1)){ $sql="SELECT 1=1 FROM groupes WHERE id='".$ligne[0]."'"; //echo "$sql
"; $res_test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_test)==0){ $sql="DELETE FROM $table[$i] WHERE id_groupe='$ligne[0]'"; //echo "$sql
"; $texte_info_action="Suppression d'une référence à un groupe d'identifiant $ligne[0] dans la table $table[$i] alors que le groupe n'existe pas dans la table 'groupes'.
\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); //echo "$sql
\n"; $res_suppr=mysqli_query($GLOBALS["mysqli"], $sql); $err_no++; } } } if($err_no==0){ $texte_info_action="La table $table[$i] est OK.
\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } else {$temoin_aberrations_groupes++;} } } $texte_info_action="

Nettoyage des erreurs d'appartenance à des groupes

\n"; echo $texte_info_action; //update_infos_action_nettoyage($id_info, $texte_info_action); // Elèves dans des groupes pour lesquels ils ne sont pas dans la classe sur la période // Mais association classe/groupe OK dans j_groupes_classes //=========== // A FAIRE //=========== /* // Problème la requête est très longue mysql> select * from j_eleves_groupes where concat(login,"|",periode) not in (select concat(login,"|",periode) from j_eleves_classes); Empty set (3 min 1.34 sec) mysql> */ if(!isset($_POST['nettoyage_grp'])) { // BOUCLE classes... récupérer le nombre de périodes... et supprimer ce qui est associé pour les périodes supérieures dans j_eleves_classes et j_eleves_groupes... contrôler avant si il y a des données dans matieres_appreciations, matieres_notes, avis_conseil_classe et cn_cahier_notes $texte_info_action="

Recherche des élèves affectés dans des groupes sur des périodes non associées à leur classe.

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); // BOUCLE sur les classes $sql="SELECT id FROM classes ORDER BY classe;"; //echo "$sql
\n"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)==0) { $texte_info_action="

Aucune classe n'est enregistrée dans la table 'classes'.

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } else { $nb_corrections=0; $nb_erreurs=0; $prof_precedent=""; while($lig=mysqli_fetch_object($res)) { $texte_info_action="

Classe ".get_class_from_id($lig->id)."
\n"; $sql="SELECT jeg.* FROM j_eleves_groupes jeg, j_groupes_classes jgc WHERE jgc.id_classe='$lig->id' AND jeg.id_groupe=jgc.id_groupe AND jeg.periode NOT IN (SELECT num_periode FROM periodes WHERE id_classe='$lig->id');"; //echo "$sql
\n"; $res2=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res2)>0) { $nb_suppr=0; $texte_info_action.=mysqli_num_rows($res2)." inscriptions en erreur d'élèves dans 'j_eleves_groupes' pour une période non associée à la classe ".get_class_from_id($lig->id)." : "; while($lig2=mysqli_fetch_object($res2)) { $sql="SELECT * FROM matieres_notes WHERE login='$lig2->login' AND id_groupe='$lig2->id_groupe' AND periode='$lig2->periode';"; //echo "$sql
\n"; $res_liste_notes=mysqli_query($GLOBALS["mysqli"], $sql); $sql="SELECT * FROM matieres_appreciations WHERE login='$lig2->login' AND id_groupe='$lig2->id_groupe' AND periode='$lig2->periode';"; //echo "$sql
\n"; $res_liste_appreciations=mysqli_query($GLOBALS["mysqli"], $sql); if((mysqli_num_rows($res_liste_notes)==0)&&(mysqli_num_rows($res_liste_appreciations)==0)){ $sql="DELETE FROM j_eleves_groupes WHERE id_groupe='$lig2->id_groupe' AND login='$lig2->login' AND periode='$lig2->periode';"; //echo "$sql
\n"; $resultat_nettoyage_initial=mysqli_query($GLOBALS["mysqli"], $sql); if($resultat_nettoyage_initial) {$nb_suppr++;} } else { $texte_info_action.="
\n"; $texte_info_action.="Bulletins non vides pour $lig2->login sur la période $lig2->periode.
\n"; } //echo "$lig2->id_groupe $lig2->login $lig2->periode
\n"; } $texte_info_action.="$nb_suppr suppressions.
\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } } } // Elèves dans des groupes pour lesquels l'association classe/groupe n'existe pas dans j_groupes_classes pour leurs classes //=========== // A FAIRE //=========== echo "

\n"; echo add_token_field(); echo "\n"; if(!isset($_POST['nettoyage_grp'])) { $sql="CREATE TABLE IF NOT EXISTS tempo2 ( col1 varchar(100) NOT NULL default '', col2 varchar(100) NOT NULL default '' ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;"; $create_table=mysqli_query($GLOBALS["mysqli"], $sql); $sql="TRUNCATE tempo2;"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); $sql="INSERT INTO tempo2 SELECT DISTINCT login,periode FROM j_eleves_groupes ORDER BY login,periode;"; $insert=mysqli_query($GLOBALS["mysqli"], $sql); echo "

Vous allez rechercher les incohérences de groupes.

\n"; echo "\n"; //echo "\n"; echo "\n"; echo "\n"; } else { echo "\n"; $sql="SELECT 1=1 FROM tempo2;"; $res0=mysqli_query($GLOBALS["mysqli"], $sql); $nb_assoc_login_periode=mysqli_num_rows($res0); if($nb_assoc_login_periode>0) { echo "

$nb_assoc_login_periode association(s) login/période reste(nt) à contrôler.

\n"; } /* $err_no=0; // On commence par ne récupérer que les login/periode pour ne pas risquer d'oublier d'élèves // (il peut y avoir des incohérences non détectées si on essaye de récupérer davantage d'infos dans un premier temps) $sql="SELECT DISTINCT login,periode FROM j_eleves_groupes ORDER BY login,periode;"; $res_ele=mysql_query($sql); $ini=""; while($lig_ele=mysql_fetch_object($res_ele)){ */ $tranche=20; // On commence par ne récupérer que les login/periode pour ne pas risquer d'oublier d'élèves // (il peut y avoir des incohérences non détectées si on essaye de récupérer davantage d'infos dans un premier temps) $sql="SELECT col1 AS login,col2 AS periode FROM tempo2 LIMIT $tranche;"; //echo "$sql
\n"; $res_ele=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_ele)>0) { //$cpt_affichage_info=0; $err_no=0; // On commence par ne récupérer que les login/periode pour ne pas risquer d'oublier d'élèves // (il peut y avoir des incohérences non détectées si on essaye de récupérer davantage d'infos dans un premier temps) //$sql="SELECT DISTINCT login,periode FROM j_eleves_groupes ORDER BY login,periode;"; //$res_ele=mysql_query($sql); $ini=""; while($lig_ele=mysqli_fetch_object($res_ele)) { $texte_info_action=""; if(mb_strtoupper(mb_substr($lig_ele->login,0,1))!=$ini){ $ini=mb_strtoupper(mb_substr($lig_ele->login,0,1)); echo "

\nParcours des logins commençant par la lettre $ini

\n"; } // Récupération de la liste des groupes auxquels l'élève est inscrit sur la période en cours d'analyse: $sql="SELECT id_groupe FROM j_eleves_groupes WHERE login='$lig_ele->login' AND periode='$lig_ele->periode'"; //echo "$sql
\n"; $res_jeg=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_jeg)>0){ // On vérifie si l'élève est dans une classe pour cette période: $sql="SELECT id_classe FROM j_eleves_classes WHERE login='$lig_ele->login' AND periode='$lig_ele->periode'"; $res_jec=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_jec)==0){ // L'élève n'est dans aucune classe sur la période choisie. $texte_info_action.="

\n"; $texte_info_action.="$lig_ele->login n'est dans aucune classe en période $lig_ele->periode et se trouve pourtant dans des groupes.
\n"; $texte_info_action.="Suppression de l'élève du(es) groupe(s) "; $cpt_tmp=1; while($lig_grp=mysqli_fetch_object($res_jeg)){ $id_groupe=$lig_grp->id_groupe; //$tmp_groupe=get_group($id_groupe); //$nom_groupe=$tmp_groupe['description']; $sql="SELECT description FROM groupes WHERE id='$id_groupe'"; $res_grp_tmp=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_grp_tmp)==0){ $nom_groupe="GROUPE INEXISTANT\n"; } else{ $lig_grp_tmp=mysqli_fetch_object($res_grp_tmp); $nom_groupe=$lig_grp_tmp->description; } // On va le supprimer du groupe après un dernier test: $test1=mysqli_query($GLOBALS["mysqli"], "SELECT 1=1 FROM matieres_notes WHERE (id_groupe = '".$id_groupe."' and login = '".$lig_ele->login."' and periode = '$lig_ele->periode')"); $nb_test1 = mysqli_num_rows($test1); $test2=mysqli_query($GLOBALS["mysqli"], "SELECT 1=1 FROM matieres_appreciations WHERE (id_groupe = '".$id_groupe."' and login = '".$lig_ele->login."' and periode = '$lig_ele->periode')"); $nb_test2 = mysqli_num_rows($test2); if (($nb_test1 != 0) or ($nb_test2 != 0)) { $texte_info_action.="
Impossible de supprimer cette option pour l'élève $lig_ele->login car des moyennes ou appréciations ont déjà été rentrées pour le groupe $nom_groupe pour la période $lig_ele->periode !
\nCommencez par supprimer ces données !

\n"; } else { if($req=mysqli_query($GLOBALS["mysqli"], "DELETE FROM j_eleves_groupes WHERE (login='".$lig_ele->login."' and id_groupe='".$id_groupe."' and periode = '".$lig_ele->periode."')")){ if($cpt_tmp>1){echo ", ";} $texte_info_action.="$nom_groupe (n°$id_groupe)"; $cpt_tmp++; } } } } else{ if(mysqli_num_rows($res_jec)==1){ $lig_clas=mysqli_fetch_object($res_jec); while($lig_grp=mysqli_fetch_object($res_jeg)){ // On cherche si l'association groupe/classe existe: $sql="SELECT 1=1 FROM j_groupes_classes WHERE id_groupe='$lig_grp->id_groupe' AND id_classe='$lig_clas->id_classe'"; $res_test_grp_clas=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_test_grp_clas)==0){ $id_groupe=$lig_grp->id_groupe; $tmp_groupe=get_group($id_groupe); $nom_groupe=$tmp_groupe['description']; $sql="SELECT classe FROM classes WHERE id='$lig_clas->id_classe'"; $res_tmp=mysqli_query($GLOBALS["mysqli"], $sql); $lig_tmp=mysqli_fetch_object($res_tmp); $clas_tmp=$lig_tmp->classe; $sql="SELECT description FROM groupes WHERE id='$lig_grp->id_groupe'"; $res_tmp=mysqli_query($GLOBALS["mysqli"], $sql); $lig_tmp=mysqli_fetch_object($res_tmp); $grp_tmp=$lig_tmp->description; $texte_info_action.="

\n"; $texte_info_action.="$lig_ele->login est inscrit en période $lig_ele->periode dans le groupe $grp_tmp (groupe n°$lig_grp->id_groupe) alors que ce groupe n'est pas associé à la classe $clas_tmp dans 'j_groupes_classes'.
\n"; $texte_info_action.="Suppression de l'élève du groupe "; // On va le supprimer du groupe après un dernier test: $test1=mysqli_query($GLOBALS["mysqli"], "SELECT 1=1 FROM matieres_notes WHERE (id_groupe = '".$id_groupe."' and login = '".$lig_ele->login."' and periode = '$lig_ele->periode')"); $nb_test1 = mysqli_num_rows($test1); $test2=mysqli_query($GLOBALS["mysqli"], "SELECT 1=1 FROM matieres_appreciations WHERE (id_groupe = '".$id_groupe."' and login = '".$lig_ele->login."' and periode = '$lig_ele->periode')"); $nb_test2 = mysqli_num_rows($test2); if (($nb_test1 != 0) or ($nb_test2 != 0)) { $texte_info_action.="
Impossible de supprimer cette option pour l'élève $lig_ele->login car des moyennes ou appréciations ont déjà été rentrées pour le groupe $nom_groupe pour la période $lig_ele->periode !
\nCommencez par supprimer ces données !

\n"; } else { if($req=mysqli_query($GLOBALS["mysqli"], "DELETE FROM j_eleves_groupes WHERE (login='".$lig_ele->login."' and id_groupe='".$id_groupe."' and periode = '".$lig_ele->periode."')")){ $texte_info_action.="$nom_groupe (n°$id_groupe)"; //$cpt_tmp++; } } $texte_info_action.="

\n"; $err_no++; } } } else{ $texte_info_action.="

\n"; $texte_info_action.="$lig_ele->login est inscrit dans plusieurs classes sur la période $lig_ele->periode:
\n"; while($lig_clas=mysqli_fetch_object($res_jec)){ $sql="SELECT classe FROM classes WHERE id='$lig_clas->id_classe'"; $res_tmp=mysqli_query($GLOBALS["mysqli"], $sql); $lig_tmp=mysqli_fetch_object($res_tmp); $clas_tmp=$lig_tmp->classe; $texte_info_action.="Classe de $clas_tmp (n°$lig_clas->id_classe)
\n"; } $texte_info_action.="Cela ne devrait pas être possible.
\n"; $texte_info_action.="Faites le ménage dans les effectifs des classes ci-dessus.\n"; $texte_info_action.="

\n"; $err_no++; } } // Cette association login/periode a été parcourue: $sql="DELETE FROM tempo2 WHERE col1='$lig_ele->login' AND col2='$lig_ele->periode';"; //echo "$sql
\n"; $nettoyage=mysqli_query($GLOBALS["mysqli"], $sql); } echo $texte_info_action; if($texte_info_action!="") {update_infos_action_nettoyage($id_info, $texte_info_action);} // Pour envoyer ce qui a été écrit vers l'écran sans attendre la fin de la page... flush(); } if($err_no==0){ $texte_info_action="

Aucune erreur d'affectation dans des groupes/classes n'a été détectée.

\n"; } else{ $texte_info_action="

Une ou des erreurs ont été relevées."; $texte_info_action.="

\n"; update_infos_action_nettoyage($id_info, $texte_info_action); } echo $texte_info_action; //update_infos_action_nettoyage($id_info, $texte_info_action); echo "\n"; echo "\n"; //if(($err_no==0)&&($temoin_aberrations_groupes==0)) { if(($err_no==0)&&($temoin_aberrations_groupes==0)&&($mode_auto=='n')) { echo "\n"; } } else { $texte_info_action="

Vérification des groupes terminée.

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); echo "\n"; echo "
\n"; } } echo "\n"; echo "
\n"; echo script_suite_submit(); } elseif ((isset($_POST['maj']) and (($_POST['maj'])=="10")) or (isset($_GET['maj']) and (($_GET['maj'])=="10"))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Etape 10/$total_etapes

\n"; /* $texte_info_action="

Nettoyage des comptes élèves/responsables

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); */ echo "
\n"; echo add_token_field(); echo "\n"; if(!isset($_POST['nettoyage_comptes_ele_resp'])) { $texte_info_action="

Nettoyage des comptes élèves/responsables

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); $sql="CREATE TABLE IF NOT EXISTS tempo2 ( col1 varchar(100) NOT NULL default '', col2 varchar(100) NOT NULL default '' ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;"; $create_table=mysqli_query($GLOBALS["mysqli"], $sql); $sql="TRUNCATE tempo2;"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); $sql="INSERT INTO tempo2 SELECT login,statut FROM utilisateurs WHERE statut='eleve' OR statut='responsable';"; $insert=mysqli_query($GLOBALS["mysqli"], $sql); echo "

Vous allez supprimer les comptes d'élèves ayant quitté l'établissement et de responsables n'ayant plus d'enfant scolarisé dans l'établissement.

\n"; echo "\n"; echo "\n"; } else { // Suppression d'anomalies $sql="DELETE FROM resp_pers WHERE pers_id='';"; $menage=mysqli_query($GLOBALS["mysqli"], $sql); $sql="DELETE FROM responsables2 WHERE pers_id='';"; $menage=mysqli_query($GLOBALS["mysqli"], $sql); $cpt_suppr=isset($_POST['cpt_suppr']) ? $_POST['cpt_suppr'] : 0; $cpt_suppr_etape=0; $sql="SELECT 1=1 FROM tempo2;"; $res0=mysqli_query($GLOBALS["mysqli"], $sql); $nb_comptes=mysqli_num_rows($res0); if($nb_comptes>0) {echo "

$nb_comptes comptes reste(nt) à contrôler.

\n";} $tranche=100; $sql="SELECT * FROM tempo2 LIMIT $tranche;"; //echo "$sql
\n"; $res1=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res1)>0) { $cpt_affichage_info=0; $texte_info_action=""; while($lig1=mysqli_fetch_object($res1)) { if($lig1->col2=='eleve') { $sql="SELECT 1=1 FROM eleves WHERE login='$lig1->col1';"; //echo "$sql
\n"; $res2=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res2)==0) { if($cpt_affichage_info==0) {$texte_info_action.="

";} $texte_info_action.="L'élève $lig1->col1 est absent de la table 'eleves', son compte utilisateur doit être supprimé.
\n"; $sql="DELETE FROM utilisateurs WHERE login='$lig1->col1';"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); $cpt_suppr_etape++; $cpt_affichage_info++; } else { $sql="SELECT 1=1 FROM j_eleves_classes WHERE login='$lig1->col1';"; $res2=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res2)==0) { if($cpt_affichage_info==0) {$texte_info_action.="

";} $texte_info_action.="L'élève $lig1->col1 n'est dans aucune classe, son compte utilisateur doit être supprimé.
\n"; $sql="DELETE FROM utilisateurs WHERE login='$lig1->col1';"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); $sql="DELETE FROM sso_table_correspondance WHERE login_gepi='$lig1->col1';"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); $cpt_suppr_etape++; $cpt_affichage_info++; } } } else { $sql="SELECT rp.pers_id FROM resp_pers rp WHERE rp.login='$lig1->col1';"; $res2=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res2)==0) { if($cpt_affichage_info==0) {$texte_info_action.="

";} $texte_info_action.="Le responsable $lig1->col1 est absent de la table 'resp_pers', son compte utilisateur doit être supprimé.
\n"; $sql="DELETE FROM utilisateurs WHERE login='$lig1->col1';"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); $sql="DELETE FROM sso_table_correspondance WHERE login_gepi='$lig1->col1';"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); $cpt_suppr_etape++; $cpt_affichage_info++; } else { $sql="SELECT e.login FROM eleves e, resp_pers rp, responsables2 r WHERE rp.login='$lig1->col1' AND r.pers_id=rp.pers_id AND e.ele_id=r.ele_id;"; //echo "$sql
\n"; $res2=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res2)==0) { if($cpt_affichage_info==0) {$texte_info_action.="

";} $texte_info_action.="Le responsable $lig1->col1 n'est pas associé à un élève; \n"; $sql="SELECT pers_id FROM resp_pers WHERE login='$lig1->col1';"; //echo "$sql
\n"; $res3=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res3)>0) { $lig3=mysqli_fetch_object($res3); $texte_info_action.="suppression des éventuelles associations fantomes dans 'responsables2'.
\n"; $sql="DELETE FROM responsables2 WHERE pers_id='$lig3->pers_id';"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); $cpt_affichage_info++; } if($cpt_affichage_info==0) {$texte_info_action.="

";} $texte_info_action.="Suppression du responsable $lig1->col1 dans 'resp_pers'.
\n"; $sql="DELETE FROM resp_pers WHERE login='$lig1->col1';"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); $texte_info_action.="Suppression du responsable $lig1->col1 dans 'utilisateurs'.
\n"; $sql="DELETE FROM utilisateurs WHERE login='$lig1->col1';"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); $sql="DELETE FROM sso_table_correspondance WHERE login_gepi='$lig1->col1';"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); $cpt_suppr_etape++; $cpt_affichage_info++; } else { // L'élève est-il encore dans une classe? $temoin_eleve_classe="n"; while($lig_ele_clas=mysqli_fetch_object($res2)) { $sql="SELECT 1=1 FROM j_eleves_classes WHERE login='$lig_ele_clas->login';"; $test_ele_clas=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test_ele_clas)>0) { $temoin_eleve_classe="y"; break; } } if($temoin_eleve_classe=="n") { $texte_info_action.="Désactivation du responsable $lig1->col1 dans 'utilisateurs' qui n'a plus d'élève dans aucune classe.
\n"; $sql="UPDATE utilisateurs SET etat='inactif' WHERE login='$lig1->col1';"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); $cpt_suppr_etape++; $cpt_affichage_info++; } } } } $sql="DELETE FROM tempo2 WHERE col1='$lig1->col1';"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); //if($cpt_affichage_info==0) {echo "

Compte $lig1->col1 conservé.

";} } if($cpt_suppr_etape==0) { echo "

Aucun compte n'a été supprimé à cette étape.

\n"; } elseif($cpt_suppr_etape==1) { echo "

Un compte a été supprimé à cette étape.

\n"; } else { $texte_info_action.="

$cpt_suppr_etape comptes ont été supprimés à cette étape.

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } $cpt_suppr+=$cpt_suppr_etape; echo "\n"; echo "\n"; echo "\n"; //if($cpt_suppr_etape==0) { if(($cpt_suppr_etape==0)&&($mode_auto=='n')) { echo "\n"; } } else { $texte_info_action="

Nettoyage des comptes d'élèves ayant quitté l'établissement et de responsables n'ayant plus d'enfant scolarisé dans l'établissement terminé.

\n"; if($cpt_suppr==0) { $texte_info_action.="

Aucun compte n'a été supprimé.

\n"; } elseif($cpt_suppr==1) { $texte_info_action.="

Un compte a été supprimé.

\n"; } else { $texte_info_action.="

$cpt_suppr comptes ont été supprimés.

\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); //echo "
\n"; //echo "

Fin de la vérification des tables

\n"; echo "\n"; echo "\n"; } } //echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo script_suite_submit(); } elseif ((isset($_POST['maj']) and (($_POST['maj'])=="11")) or (isset($_GET['maj']) and (($_GET['maj'])=="11"))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Etape 11/$total_etapes

\n"; $texte_info_action="

Nettoyage des modèles de grilles PDF

\n"; $sql="SELECT 1=1 FROM modeles_grilles_pdf WHERE login NOT IN (SELECT login FROM utilisateurs);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_scories=mysqli_num_rows($test); if($nb_scories==0) { $texte_info_action.="

Toutes les grilles sont associées à des utilisateurs existants.

\n"; } else { $texte_info_action.="

$nb_scories grille(s) ne sont associées à aucun utilisateurs existants : "; $sql="DELETE FROM modeles_grilles_pdf WHERE login NOT IN (SELECT login FROM utilisateurs);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) {$texte_info_action.="Nettoyées";} else {$texte_info_action.="Echec du nettoyage";} $texte_info_action.="

\n"; } $sql="SELECT 1=1 FROM modeles_grilles_pdf WHERE id_modele NOT IN (SELECT id_modele FROM modeles_grilles_pdf_valeurs);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_scories=mysqli_num_rows($test); if($nb_scories==0) { $texte_info_action.="

Toutes les grilles sont associées à des paramètres de grilles.

\n"; } else { $texte_info_action.="

$nb_scories grille(s) ne sont associées à aucun paramètre de grille : "; $sql="DELETE FROM modeles_grilles_pdf WHERE id_modele NOT IN (SELECT id_modele FROM modeles_grilles_pdf_valeurs);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) {$texte_info_action.="Nettoyées";} else {$texte_info_action.="Echec du nettoyage";} $texte_info_action.="

\n"; } $sql="SELECT 1=1 FROM modeles_grilles_pdf_valeurs WHERE id_modele NOT IN (SELECT id_modele FROM modeles_grilles_pdf);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_scories=mysqli_num_rows($test); if($nb_scories==0) { $texte_info_action.="

Tous les paramètres de grilles sont associés à des grilles existantes.

\n"; } else { $texte_info_action.="

$nb_scories paramètres de grilles ne sont associées à aucune grille : "; $sql="DELETE FROM modeles_grilles_pdf_valeurs WHERE id_modele NOT IN (SELECT id_modele FROM modeles_grilles_pdf);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) {$texte_info_action.="Nettoyées";} else {$texte_info_action.="Echec du nettoyage";} $texte_info_action.="

\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); //===================================== echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo script_suite_submit(); /* echo "
\n"; echo "

Fin de la vérification des tables

\n"; */ } elseif ((isset($_POST['maj']) and (($_POST['maj'])=="12")) or (isset($_GET['maj']) and (($_GET['maj'])=="12"))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Etape 12/$total_etapes

\n"; $texte_info_action="

Suppression des adresses responsables non associées

\n"; $sql="select 1=1 from resp_adr where adr_id not in (select distinct adr_id from resp_pers);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_scories=mysqli_num_rows($test); if($nb_scories==0) { $texte_info_action.="

Toutes les adresses sont associées à des responsables.

\n"; } else { $texte_info_action.="

$nb_scories adresses ne sont pas associées à des responsables : "; $sql="delete from resp_adr where adr_id not in (select distinct adr_id from resp_pers);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) {$texte_info_action.="Nettoyées";} else {$texte_info_action.="Echec du nettoyage";} $texte_info_action.="

\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); //===================================== echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo script_suite_submit(); /* echo "
\n"; echo "

Fin de la vérification des tables

\n"; */ } elseif ((isset($_POST['maj']) and (($_POST['maj'])=="13")) or (isset($_GET['maj']) and (($_GET['maj'])=="13"))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Etape 13/$total_etapes

\n"; $tab_engagements=get_tab_engagements(); $texte_info_action="

Suppression des engagements incorrects

\n"; $sql="select * from engagements_user;"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)==0) { $texte_info_action.="

Aucun engagement n'est saisi.

\n"; } else { while($lig=mysqli_fetch_object($res)) { $sql="SELECT * FROM eleves WHERE login='".$lig->login."';"; $res2=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res2)>0) { if($lig->id_type=='id_classe') { $sql="SELECT * FROM j_eleves_classes WHERE login='".$lig->login."' AND id_classe='".$lig->valeur."';"; $res3=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res3)==0) { $lig2=mysqli_fetch_object($res2); $texte_info_action.="Suppression d'un engagement (".$tab_engagements['id_engagement'][$lig->id_engagement]['nom'].") en classe de ".get_nom_classe($lig->valeur)." pour ".$lig2->prenom." ".$lig2->nom." : "; $sql="DELETE FROM engagements_user WHERE id='".$lig->id."';"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if(!$del) { $texte_info_action.="ERREUR"; } else { $texte_info_action.="SUCCES"; } $texte_info_action.=".
\n"; } } } else { $sql="SELECT * FROM resp_pers WHERE login='".$lig->login."';"; $res2=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res2)==0) { $sql="SELECT * FROM utilisateurs WHERE login='".$lig->login."';"; $res3=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res3)==0) { $texte_info_action.="Suppression d'un engagement (".$tab_engagements['id_engagement'][$lig->id_engagement]['nom'].") en classe de ".get_nom_classe($lig->valeur)." pour une personne qui n'est plus dans la base (".$lig->login.") : "; $sql="DELETE FROM engagements_user WHERE id='".$lig->id."';"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if(!$del) { $texte_info_action.="ERREUR"; } else { $texte_info_action.="SUCCES"; } $texte_info_action.=".
\n"; } } } } } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); //===================================== echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo script_suite_submit(); } elseif ((isset($_POST['maj']) and (($_POST['maj'])=="14")) or (isset($_GET['maj']) and (($_GET['maj'])=="14"))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Etape 14/$total_etapes

\n"; $texte_info_action="

Suppression des scories de Dates événements classes attachés à des classes qui n'existent plus

\n"; $sql="SELECT * FROM d_dates_evenements_classes WHERE id_classe NOT IN (SELECT id FROM classes);"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)==0) { $texte_info_action.="

Aucune scorie trouvée.

\n"; } else { $texte_info_action.="

Suppression de ".mysqli_num_rows($res)." enregistrement(s) dans la table 'd_dates_evenements_classes' : "; $sql="DELETE FROM d_dates_evenements_classes WHERE id_classe NOT IN (SELECT id FROM classes);"; //echo "$sql
"; $del=mysqli_query($GLOBALS['mysqli'], $sql); if(!$del) { $texte_info_action.="ERREUR"; } else { $texte_info_action.="SUCCES"; } $texte_info_action.=".
\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); //===================================== echo "

\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo script_suite_submit(); /* echo "
\n"; echo "

Fin de la vérification des tables

\n"; */ } elseif (isset($_POST['action']) AND $_POST['action'] == 'check_auto_increment') { // Le code de Stéphane concernant la vérification des auto_increment après le bug détecté // concernant les backups réalisé avec la commande système mysqldump echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; if (isset($_POST['is_confirmed']) and $_POST['is_confirmed'] == "yes") { $liste_tab=array("classes","id","`id` smallint(6) unsigned NOT NULL auto_increment", "cn_cahier_notes","id_cahier_notes","`id_cahier_notes` int(11) NOT NULL auto_increment", "cn_conteneurs","id","`id` int(11) NOT NULL auto_increment", "cn_devoirs","id","`id` int(11) NOT NULL auto_increment", "commentaires_types","id","`id` INT( 11 ) NOT NULL AUTO_INCREMENT", "ct_devoirs_entry","id_ct","`id_ct` int(11) NOT NULL auto_increment", "ct_documents","id","`id` int(11) NOT NULL auto_increment", "ct_entry","id_ct","`id_ct` int(11) NOT NULL auto_increment", "ct_types_documents","id_type","`id_type` bigint(21) NOT NULL auto_increment", "messages","id","`id` int(11) NOT NULL auto_increment", "suivi_eleve_cpe","id_suivi_eleve_cpe","`id_suivi_eleve_cpe` int(11) NOT NULL auto_increment", "absences_eleves","id_absence_eleve","`id_absence_eleve` int(11) NOT NULL auto_increment", "edt_creneaux","id_definie_periode","`id_definie_periode` int(11) NOT NULL auto_increment", "absences_motifs","id_motif_absence","`id_motif_absence` int(11) NOT NULL auto_increment", "groupes","id","`id` int(11) NOT NULL auto_increment", "miseajour","id_miseajour","`id_miseajour` int(11) NOT NULL auto_increment", "absences_actions","id_absence_action","`id_absence_action` int(11) NOT NULL auto_increment", "edt_classes","id_edt_classe","`id_edt_classe` int(11) NOT NULL auto_increment", "model_bulletin","id_model_bulletin","`id_model_bulletin` int(11) NOT NULL auto_increment", "edt_dates_special","id_edt_date_special","`id_edt_date_special` int(11) NOT NULL auto_increment", "edt_semaines","id_edt_semaine","`id_edt_semaine` int(11) NOT NULL auto_increment", "etiquettes_formats","id_etiquette_format","`id_etiquette_format` int(11) NOT NULL auto_increment", "horaires_etablissement","id_horaire_etablissement","`id_horaire_etablissement` int(11) NOT NULL auto_increment", "lettres_cadres","id_lettre_cadre","`id_lettre_cadre` int(11) NOT NULL auto_increment", "lettres_suivis","id_lettre_suivi","`id_lettre_suivi` int(11) NOT NULL auto_increment", "lettres_tcs","id_lettre_tc","`id_lettre_tc` int(11) NOT NULL auto_increment", "lettres_types","id_lettre_type","`id_lettre_type` int(11) NOT NULL auto_increment", "vs_alerts_eleves","id_alert_eleve","`id_alert_eleve` int(11) NOT NULL auto_increment", "vs_alerts_groupes","id_alert_groupe","`id_alert_groupe` int(11) NOT NULL auto_increment", "vs_alerts_types","id_alert_type","`id_alert_type` int(11) NOT NULL auto_increment" ); $temoin_poursuivre_corrections='yes'; $corrections = array(); echo "

\n"; for($i=0;$i\n"; if($test>0){ $sql="show columns from $liste_tab[$i] like '".$liste_tab[$i+1]."';"; //echo "$sql
\n"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)>0){ unset($lig); $lig=mysqli_fetch_array($res); $temoin="no"; //echo "

\n"; for($j=0;$j\n"; if($lig[$j]=='auto_increment'){$temoin="yes";break;} } } //echo "

\n"; echo "
Champ auto_increment de la table '$liste_tab[$i]': "; if($temoin=='yes'){ echo "OK\n"; } else { echo "ERREUR (le champ a été ajouté à la liste des corrections).\n"; // On enregistre les infos dans un tableau distinct $corrections[] = array($liste_tab[$i], $liste_tab[$i+1], $liste_tab[$i+2]); echo "
Test d'intégrité : "; $sql="SELECT 1=1 FROM $liste_tab[$i] WHERE ".$liste_tab[$i+1]."='0'"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)==0){ echo "Aucun dégat ne semble encore fait sur cette table.
\n"; } else { $temoin_poursuivre_corrections='no'; echo "Erreur : des dégâts ont déjà été faits sur cette table. Aucune correction de la structure de la base de données n'aura lieu. Vous devez corriger les incohérences dans la base de données en recherchant les entrées ayant pour valeur '0' sur le champ supposé auto-incrémenté (champ ".$liste_tab[$i+1].")
\n"; } } } } } echo "

\n"; // Si aucun dégât n'a été constaté et qu'on a des tables à corriger, on le fait maintenant if ($temoin_poursuivre_corrections=='yes') { echo "

Corrections effectives

\n"; if (empty($corrections)) { // Si aucune table n'avait de problème, pas besoin de corriger. //echo "

Aucune table n'a besoin de corrections.

\n"; echo "

Aucune table n'a besoin de corrections.

\n"; } else { // On procède aux corrections foreach($corrections as $correct_table) { echo "
Correction de la table ".$correct_table[0]." : "; $sql="ALTER TABLE ".$correct_table[0]." CHANGE ".$correct_table[1]." ".$correct_table[2]; $res=mysqli_query($GLOBALS["mysqli"], $sql); if ($res) { // La correction s'est bien passée echo "OK\n"; } else { echo "ERREUR !
\n"; echo "Vous devez vérifier la cause du dysfonctionnement et faire la correction à la main (le champ à passer en auto_increment est : ".$corrections[1].")
\n"; echo "Vous devriez interdire les connexions ('Gestion générale/Gestion des connexions/Désactiver les connexions') et contacter la liste de diffusion des utilisateurs pour prendre conseil."; } } } } else { // Des erreurs d'intégrité ont été détectées : on ne change rien... echo "

Aucune correction n'a été tentée. Des problèmes d'intégrité des données ont été détectés, la procédure ne peut pas continuer. Vous devez corriger les problèmes à la main (recherchez les entrées ayant la valeur '0' pour le champ supposé auto-incrémenté) et relancer cette procédure.

\n"; } } else { echo "

Vérification des champs auto-incrémentés

\n"; echo "

La procédure suivante vérifie l'intégrité de certains champs de la base de données et tente de corriger les erreurs rencontrées si elles existent.

\n"; echo "

Ce script ne doit être exécuté que si vous avez restauré sur votre Gepi une sauvegarde réalisée avec une version 1.4.4 en utilisant la méthode 'mysqldump' (et non la méthode classique de sauvegarde Gepi sans mysqldump).

\n"; echo "

La procédure débute par une série de tests sur les champs devant être auto-incrémentés. Si aucun problème n'est rencontré, aucune modification n'est faite. Si certains champs n'ont pas l'option d'auto-incrémentation, des tests sont faits sur l'intégrité des données. Si aucun problème d'intégrité des données n'a été détecté, la procédure corrigera les champs nécessaires. Sinon, un message d'erreur sera affiché et aucune modification ne sera effectuée sur la base de données.

\n"; echo "

Si vous êtes sûr de vouloir continuer, cliquez sur le bouton ci-dessous.

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "\n"; //echo "\n"; echo "
\n"; } } elseif ((isset($_POST['action']) AND $_POST['action'] == 'check_jec_jep_point')||((isset($_POST['maj']))&&($_POST['maj']=='check_jec_jep_point'))||((isset($_GET['maj']))&&($_GET['maj']=='check_jec_jep_point'))) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; $gepi_prof_suivi=getSettingValue("gepi_prof_suivi"); if (isset($_POST['is_confirmed']) and $_POST['is_confirmed'] == "yes") { if((isset($_POST['maj']))&&($_POST['maj']=='check_jec_jep_point')) { $texte_info_action="

Etape 15/$total_etapes
Vérification des tables 'j_eleves_cpe', 'j_eleves_professeurs' et 'j_scol_classes'

\n"; } else { $texte_info_action="

Vérification des tables 'j_eleves_cpe', 'j_eleves_professeurs' et 'j_scol_classes'

\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); // Initialisation pour test $texte_info_action=""; // Les champs vides pouvaient apparaitre avec le bug (désormais corrigé) sur les POINTS et TIRETS dans les noms de login. $sql="SELECT * FROM j_eleves_cpe WHERE cpe_login='' OR e_login='';"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_cpe=mysqli_num_rows($test); if($nb_pb_cpe>0){ $sql="DELETE FROM j_eleves_cpe WHERE cpe_login='' OR e_login='';"; $nettoyage=mysqli_query($GLOBALS["mysqli"], $sql); if($nettoyage){ $texte_info_action="

$nb_pb_cpe erreur(s) nettoyée(s) dans la table 'j_eleves_cpe'.

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } else{ $texte_info_action="

Erreur lors du nettoyage de la table 'j_eleves_cpe'.

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } } // Problème de suppression de l'association eleve/cpe après suppression d'un élève de toutes les périodes... (plus dans aucune classe) $sql="SELECT jecpe.e_login FROM j_eleves_cpe jecpe LEFT JOIN j_eleves_classes jec ON jecpe.e_login=jec.login WHERE jec.login is NULL;"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_cpe=mysqli_num_rows($test); if($nb_pb_cpe>0){ $texte_info_action="

Suppression d'associations CPE/Elève pour un ou des élèves qui ne sont affectés dans aucune classe : "; $cpt_ele_cpe=0; while($lig=mysqli_fetch_object($test)){ if($cpt_ele_cpe>0){$texte_info_action.=", ";} $sql="SELECT e.nom,e.prenom FROM eleves e WHERE login='$lig->e_login';"; //echo "\n"; $info=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($info)>0) { $lig2=mysqli_fetch_object($info); $eleve=ucfirst(mb_strtolower($lig2->prenom))." ".mb_strtoupper($lig2->nom); } else { $eleve=$lig->e_login; } //echo "\n"; $sql="DELETE FROM j_eleves_cpe WHERE e_login='$lig->e_login';"; //echo "\n"; $nettoyage=mysqli_query($GLOBALS["mysqli"], $sql); if($nettoyage){ $texte_info_action.=$eleve; } else{ $texte_info_action.="$eleve\n"; } $cpt_ele_cpe++; } $texte_info_action.=".

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } // Suppression des associations élèves/cpe pour des comptes non cpe $sql="SELECT * FROM j_eleves_cpe jec WHERE cpe_login NOT IN (SELECT login FROM utilisateurs u WHERE u.statut='cpe');"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_cpe=mysqli_num_rows($test); if($nb_pb_cpe>0){ $texte_info_action="

Suppression d'associations CPE/Elève pour un ou des élèves associés à un compte qui n'est pas ou plus CPE : "; $cpt_ele_cpe=0; while($lig=mysqli_fetch_object($test)){ if($cpt_ele_cpe>0) {$texte_info_action.=", ";} $sql="SELECT e.nom,e.prenom FROM eleves e WHERE login='$lig->e_login';"; //echo "\n"; $info=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($info)>0) { $lig2=mysqli_fetch_object($info); $eleve=ucfirst(mb_strtolower($lig2->prenom))." ".mb_strtoupper($lig2->nom); } else { $eleve=$lig->e_login; } //echo "\n"; $sql="SELECT u.nom,u.prenom FROM utilisateurs u WHERE login='$lig->cpe_login';"; //echo "\n"; $info=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($info)>0) { $lig2=mysqli_fetch_object($info); $cpe=ucfirst(mb_strtolower($lig2->prenom))." ".mb_strtoupper($lig2->nom); } else { $cpe=$lig->cpe_login; } //echo "\n"; $sql="DELETE FROM j_eleves_cpe WHERE e_login='$lig->e_login' AND cpe_login='$lig->cpe_login';"; //echo "\n"; $nettoyage=mysqli_query($GLOBALS["mysqli"], $sql); if($nettoyage){ $texte_info_action.=$eleve."|".$cpe; } else{ $texte_info_action.="$eleve|$cpe\n"; } $cpt_ele_cpe++; } $texte_info_action.=".

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } $sql="SELECT * FROM j_eleves_professeurs WHERE login='' OR professeur='';"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_pp=mysqli_num_rows($test); if($nb_pb_pp>0){ $sql="DELETE FROM j_eleves_professeurs WHERE login='' OR professeur='';"; $nettoyage=mysqli_query($GLOBALS["mysqli"], $sql); if($nettoyage){ $texte_info_action="

$nb_pb_pp erreur(s) nettoyée(s) dans la table 'j_eleves_professeurs'.

\n"; } else{ $texte_info_action="

Erreur lors du nettoyage de la table 'j_eleves_professeurs'.

\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } // Problème de suppression de l'association eleve/professeur après suppression d'un élève de toutes les périodes... (plus dans aucune classe) $sql="SELECT jep.login FROM j_eleves_professeurs jep LEFT JOIN j_eleves_classes jec ON jep.login=jec.login WHERE jec.login is NULL;"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_pp=mysqli_num_rows($test); if($nb_pb_pp>0){ $texte_info_action="

Suppression d'associations Professeur/Elève pour un ou des élèves qui ne sont affectés dans aucune classe: "; $cpt_ele_pp=0; while($lig=mysqli_fetch_object($test)){ if($cpt_ele_pp>0){$texte_info_action.=", ";} $sql="SELECT e.nom,e.prenom FROM eleves e WHERE login='$lig->login';"; $info=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($info)>0) { $lig2=mysqli_fetch_object($info); $eleve=ucfirst(mb_strtolower($lig2->prenom))." ".mb_strtoupper($lig2->nom); } else { $eleve=$lig->login; } $sql="DELETE FROM j_eleves_professeurs WHERE login='$lig->login';"; $nettoyage=mysqli_query($GLOBALS["mysqli"], $sql); if($nettoyage){ $texte_info_action.=$eleve; } else{ $texte_info_action.="$eleve\n"; } $cpt_ele_pp++; } $texte_info_action.=".

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } // Suppression des associations classes/scol pour des comptes non scolarité $sql="SELECT DISTINCT login FROM j_scol_classes jsc WHERE login NOT IN (SELECT login FROM utilisateurs u WHERE u.statut='scolarite');"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_scol=mysqli_num_rows($test); if($nb_pb_scol>0){ $texte_info_action="

Suppression d'associations Scolarité/Classe pour un ou des comptes qui ne sont pas ou plus Scolarité : "; $cpt_scol=0; while($lig=mysqli_fetch_object($test)){ if($cpt_scol>0) {$texte_info_action.=", ";} $sql="SELECT u.nom,u.prenom FROM utilisateurs u WHERE login='$lig->login';"; //echo "\n"; $info=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($info)>0) { $lig2=mysqli_fetch_object($info); $scol=ucfirst(mb_strtolower($lig2->prenom))." ".mb_strtoupper($lig2->nom); } else { $scol=$lig->login; } $sql="DELETE FROM j_scol_classes WHERE login='$lig->login';"; //echo "\n"; $nettoyage=mysqli_query($GLOBALS["mysqli"], $sql); if($nettoyage){ $texte_info_action.=$scol; } else{ $texte_info_action.="$scol\n"; } $cpt_scol++; } $texte_info_action.=".

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } // Suppression des associations classes/scol pour des classes qui n'existent pas ou plus $sql="SELECT DISTINCT id_classe FROM j_scol_classes jsc WHERE id_classe NOT IN (SELECT id FROM classes);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_scol=mysqli_num_rows($test); if($nb_pb_scol>0){ $texte_info_action="

Suppression d'associations Scolarité/Classe pour des classes qui n'existent pas ou plus : "; $sql="DELETE FROM j_scol_classes WHERE id_classe NOT IN (SELECT id FROM classes);"; $delete=mysqli_query($GLOBALS["mysqli"], $sql); if($delete) { $texte_info_action.="$nb_pb_scol association(s) supprimée(s)\n"; } else { $texte_info_action.="echec de la suppression de $nb_pb_scol association(s)\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } if($texte_info_action=="") { $texte_info_action.="

Aucune erreur n'a été trouvée.

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); } //===================================== echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo script_suite_submit(); //===================================== } else { echo "

Vérification des tables 'j_eleves_cpe', 'j_eleves_professeurs' et 'j_scol_classes'

\n"; echo "

La procédure suivante vérifie la présence d'enregistrements aberrants dans les tables 'j_eleves_cpe', 'j_eleves_professeurs' et 'j_scol_classes'.

\n"; flush(); $temoin_pb="n"; $sql="SELECT * FROM j_eleves_cpe WHERE cpe_login='' OR e_login='';"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_cpe=mysqli_num_rows($test); if($nb_pb_cpe==0){ echo "

Aucun enregistrement dans la table 'j_eleves_cpe' n'a de login élève ou de login CPE vide.

\n"; } elseif($nb_pb_cpe==1){ echo "

$nb_pb_cpe enregistrement dans la table 'j_eleves_cpe' a un login élève ou un login CPE vide.
Cet enregistrement peut perturber la désignation de CPE responsable.
Vous devrier le supprimer.

\n"; $temoin_pb="y"; } else{ echo "

$nb_pb_cpe enregistrements dans la table 'j_eleves_cpe' ont un login élève ou un login CPE vide.
\n"; echo "Ces enregistrements peuvent perturber la désignation de CPE responsable.
\n"; echo "Vous devrier les supprimer.

\n"; $temoin_pb="y"; } flush(); $sql="SELECT jecpe.e_login FROM j_eleves_cpe jecpe LEFT JOIN j_eleves_classes jec ON jecpe.e_login=jec.login WHERE jec.login is NULL;"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_cpe=mysqli_num_rows($test); if($nb_pb_cpe==0){ echo "

Aucun enregistrement dans la table 'j_eleves_cpe' n'associe un élève non scolarisé à un CPE.

\n"; } elseif($nb_pb_cpe==1){ echo "

$nb_pb_cpe enregistrement dans la table 'j_eleves_cpe' associe un élève non scolarisé à un CPE.
Cet enregistrement peut perturber la désignation de CPE responsable.
Vous devrier le supprimer.

\n"; $temoin_pb="y"; } else{ echo "

$nb_pb_cpe enregistrements dans la table 'j_eleves_cpe' associent des élèves non scolarisés à un ou des CPE.
\n"; echo "Ces enregistrements peuvent perturber la désignation de CPE responsable.
\n"; echo "Vous devrier les supprimer.

\n"; $temoin_pb="y"; } $sql="SELECT * FROM j_eleves_cpe jec WHERE cpe_login NOT IN (SELECT login FROM utilisateurs u WHERE u.statut='cpe');"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_cpe=mysqli_num_rows($test); if($nb_pb_cpe==0) { echo "

Aucun enregistrement dans la table 'j_eleves_cpe' n'est associé à un compte non CPE.

\n"; } else { echo "

$nb_pb_cpe enregistrements de la table 'j_eleves_cpe' correspond(ent) des comptes non CPE.

\n"; $temoin_pb="y"; } $sql="SELECT * FROM j_eleves_professeurs WHERE login='' OR professeur='';"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_pp=mysqli_num_rows($test); if($nb_pb_pp==0){ echo "

Aucun enregistrement dans la table 'j_eleves_professeurs' n'a de login élève ou de login $gepi_prof_suivi vide.

\n"; } elseif($nb_pb_pp==1){ echo "

$nb_pb_pp enregistrement dans la table 'j_eleves_professeurs' a un login élève ou un login $gepi_prof_suivi vide.
\n"; echo "Cet enregistrement peut perturber la désignation de $gepi_prof_suivi.
\n"; echo "Vous devrier le supprimer.

\n"; $temoin_pb="y"; } else{ echo "

$nb_pb_pp enregistrements dans la table 'j_eleves_professeurs' ont un login élève ou un login $gepi_prof_suivi vide.
\n"; echo "Ces enregistrements peuvent perturber la désignation de $gepi_prof_suivi.
\n"; echo "Vous devrier les supprimer.

\n"; $temoin_pb="y"; } $sql="SELECT jep.login FROM j_eleves_professeurs jep LEFT JOIN j_eleves_classes jec ON jep.login=jec.login WHERE jec.login is NULL;"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_pp=mysqli_num_rows($test); if($nb_pb_pp==0){ echo "

Aucun enregistrement dans la table 'j_eleves_professeurs' n'associe un élève non scolarisé à un $gepi_prof_suivi.

\n"; } elseif($nb_pb_pp==1){ echo "

$nb_pb_pp enregistrement dans la table 'j_eleves_professeurs' associe un élève non scolarisé à un $gepi_prof_suivi.
Cet enregistrement peut perturber la désignation de $gepi_prof_suivi.
Vous devrier le supprimer.

\n"; $temoin_pb="y"; } else{ echo "

$nb_pb_pp enregistrements dans la table 'j_eleves_professeurs' associent des élèves non scolarisés à un ou des $gepi_prof_suivi.
\n"; echo "Ces enregistrements peuvent perturber la désignation de $gepi_prof_suivi.
\n"; echo "Vous devrier les supprimer.

\n"; $temoin_pb="y"; } $sql="SELECT DISTINCT login FROM j_scol_classes jsc WHERE login NOT IN (SELECT login FROM utilisateurs u WHERE u.statut='scolarite');"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_scol=mysqli_num_rows($test); if($nb_pb_scol==0){ echo "

Aucun enregistrement dans la table 'j_scol_classes' n'est associé à un compte non scolarité.

\n"; } else { echo "

$nb_pb_scol enregistrements de la table 'j_scol_classes' correspond(ent) des comptes non scolarité.

\n"; $temoin_pb="y"; } $sql="SELECT DISTINCT id_classe FROM j_scol_classes jsc WHERE id_classe NOT IN (SELECT id FROM classes);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); $nb_pb_scol=mysqli_num_rows($test); if($nb_pb_scol==0){ echo "

Aucun enregistrement dans la table 'j_scol_classes' n'est associé à des classes qui n'existent pas ou plus.

\n"; } else { echo "

$nb_pb_scol enregistrements de la table 'j_scol_classes' correspond(ent) des classes qui n'existent pas ou plus.

\n"; $temoin_pb="y"; } if($temoin_pb=="y"){ echo "

Des erreurs ont été relevées.

\n"; echo "

Si vous voulez effectuer le nettoyage, cliquez sur le bouton ci-dessous.
Vous devriez contrôler par la suite si toutes vos associations CPE/élève et $gepi_prof_suivi/élève sont bien renseignées.

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "\n"; echo "
\n"; } else{ echo "

Aucune erreur n'a été relevée.

\n"; } } } elseif (isset($_POST['action']) AND $_POST['action'] == 'clean_edt') { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Nettoyage des tables EDT : \n"; $tab_table=array('edt_classes', 'edt_cours', 'edt_calendrier'); for($i=0;$i0) {echo ", ";} echo $tab_table[$i]; $sql="TRUNCATE TABLE $tab_table[$i];"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); } echo "

\n"; echo "

Terminé.

\n"; } elseif (isset($_REQUEST['action']) AND $_REQUEST['action'] == 'clean_absences') { echo "

"; if(isset($_GET['chgt_annee'])) { echo "Retour Retour à la page de Changement d'année "; } else { echo "Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; } echo "

\n"; $date_limite=isset($_REQUEST['date_limite']) ? $_REQUEST['date_limite'] : NULL; if(isset($date_limite)) { $tmp_tab=explode("/",$date_limite); $jour=$tmp_tab[0]; $mois=$tmp_tab[1]; $annee=$tmp_tab[2]; if(!checkdate($mois,$jour,$annee)) { echo "

La date saisie $date_limite n'est pas valide.

\n"; unset($date_limite); require("../lib/footer.inc.php"); die(); } } if(!isset($date_limite)) { echo "

Abandon : Aucune date limite n'a été saisie.

\n"; } else { echo "

Nettoyage des tables absences : \n"; /* $tab_table=array('absences_rb', 'absences_repas', 'absences_eleves'); for($i=0;$i0) {echo ", ";} echo $tab_table[$i]; $sql="DELETE FROM $tab_table[$i] WHERE ;"; $suppr=mysql_query($sql); } */ echo "absences_rb (abs1)"; $sql="DELETE FROM absences_rb WHERE date_saisie < ".mktime("0","0","0",$mois,$jour,$annee).";"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); echo ", "; echo "absences_eleves (abs1)"; $sql="DELETE FROM absences_eleves WHERE a_date_absence_eleve < date('$annee-$mois-$jour');"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); echo ", "; echo "absences_repas (abs1)"; $sql="DELETE FROM absences_repas WHERE a_date_absence_eleve < date('$annee-$mois-$jour');"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); echo ", "; echo "lettres_suivis (abs1)"; $sql="DELETE FROM lettres_suivis WHERE emis_date_lettre_suivi < date('$annee-$mois-$jour');"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); echo ", "; echo "a_agregation_decompte (abs2)"; $sql="DELETE FROM a_agregation_decompte WHERE debut_abs < date('$annee-$mois-$jour');"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); echo ", "; echo "a_notifications (abs2)"; $sql="DELETE FROM a_notifications WHERE created_at < date('$annee-$mois-$jour');"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); echo "a_saisies (abs2)"; $sql="DELETE FROM a_saisies WHERE debut_abs < date('$annee-$mois-$jour');"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); echo ", "; echo "a_saisies_version (abs2)"; $sql="DELETE FROM a_saisies_version WHERE debut_abs < date('$annee-$mois-$jour');"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); echo ", "; echo "a_traitements (abs2)"; $sql="DELETE FROM a_traitements WHERE created_at < date('$annee-$mois-$jour');"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); echo ", "; echo "

\n"; echo "

Terminé.

\n"; } } elseif (isset($_REQUEST['action']) AND $_REQUEST['action'] == 'clean_table_log') { echo "

"; if(isset($_GET['chgt_annee'])) { echo "Retour Retour à la page de Changement d'année "; } else { echo "Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; } echo "

\n"; $date_limite=isset($_REQUEST['date_limite']) ? $_REQUEST['date_limite'] : NULL; if(isset($date_limite)) { echo "

Nettoyage des logs antérieurs au $date_limite : ".clean_table_log($date_limite)."

\n"; echo "

Terminé.

\n"; } } elseif (isset($_REQUEST['action']) AND $_REQUEST['action'] == 'clean_table_tentative_intrusion') { echo "

"; if(isset($_GET['chgt_annee'])) { echo "Retour Retour à la page de Changement d'année "; } else { echo "Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; } echo "

\n"; $date_limite=isset($_REQUEST['date_limite']) ? $_REQUEST['date_limite'] : NULL; if(isset($date_limite)) { echo "

Nettoyage des logs de tentatives d'intrusion antérieurs au $date_limite : ".clean_table_tentative_intrusion($date_limite)."

\n"; echo "

Terminé.

\n"; } } elseif (isset($_POST['action']) AND $_POST['action'] == 'clean_cdt') { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Nettoyage des tables du module Cahier de textes : \n"; $tab_table=array("ct_devoirs_entry", "ct_documents", "ct_entry", "ct_devoirs_documents", "ct_private_entry", "ct_sequences"); for($i=0;$i0) {echo ", ";} echo $tab_table[$i]; $sql="TRUNCATE TABLE $tab_table[$i];"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); } echo "

\n"; echo "

Terminé.

\n"; } elseif (isset($_POST['action']) AND $_POST['action'] == 'clean_temp_tables') { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Nettoyage des tables temporaires : \n"; echo clean_temp_tables(); echo "

\n"; echo "

Terminé.

\n"; } elseif((isset($_POST['action']) AND $_POST['action'] == 'verif_interclassements')||(isset($_POST['maj']) AND $_POST['maj'] == 'verif_interclassements')||(isset($_GET['maj']) AND $_GET['maj'] == 'verif_interclassements')) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; if((isset($_POST['maj']))&&($_POST['maj']=='verif_interclassements')) { $texte_info_action="

Etape 16/$total_etapes
Vérification des interclassements

\n"; } else { $texte_info_action="

Vérification des interclassements

\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); $sql="SHOW TABLES;"; $res_table=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_table)==0) { $texte_info_action="

Aucune table n'a été trouvée???

\n"; } else { $texte_info_action=""; $tab_collations=array(); $texte_info_action.=""; $texte_info_action.=""; $texte_info_action.=""; $texte_info_action.=""; $texte_info_action.=""; $texte_info_action.=""; $texte_info_action.=""; $texte_info_action.=""; $texte_info_action.=""; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); $alt=1; while($tab=mysqli_fetch_array($res_table)) { $texte_info_action=""; $alt=$alt*(-1); $alt2=$alt; //$texte_info_action.="\$tab[0]=$tab[0]
\n"; //$sql="show fields from $tab[0] where type like 'varchar%' or type like 'char%';"; $sql="show full columns from $tab[0] where type like 'varchar%' or type like 'char%';"; //$sql="show full columns from $tab[0];"; $res_champs=mysqli_query($GLOBALS["mysqli"], $sql); $nb_champs=mysqli_num_rows($res_champs); $texte_info_action.=""; $texte_info_action.=""; $cpt=0; while($lig_champ=mysqli_fetch_object($res_champs)) { if($cpt>0) { $alt2=$alt2*(-1); $texte_info_action.=""; } $texte_info_action.=""; $texte_info_action.=""; $texte_info_action.=""; $texte_info_action.=""; $cpt++; } if($cpt==0) { //$texte_info_action.=""; $texte_info_action.=""; $texte_info_action.=""; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); flush(); } $texte_info_action="
TableChampTypeInterclassement
0) { $texte_info_action.=" rowspan='$nb_champs'"; } $texte_info_action.=">$tab[0]
$lig_champ->Field$lig_champ->Type"; /* $sql="SELECT DISTINCT collation($lig->Field) as c FROM $tab[0];"; $res_collation=mysql_query($sql); if(mysql_num_rows($res_collation)==0) { $texte_info_action.="Table vide... détection de l'interclassement impossible"; } else { while($lig_collation=mysql_fetch_object($res_champs)) { $texte_info_action.=$lig_collation->c." "; } } */ //if($lig_champ->Collation!='utf8_general_ci' && $lig_champ->Collation!=NULL) { if($lig_champ->Collation!='utf8_general_ci') { $texte_info_action.="".$lig_champ->Collation.""; $texte_info_action.="
Corriger"; } else { $texte_info_action.=$lig_champ->Collation; } //if(!in_array($lig_champ->Collation,$tab_collations) && $lig_champ->Collation!=NULL) {$tab_collations[]=$lig_champ->Collation;} if(!in_array($lig_champ->Collation,$tab_collations)) {$tab_collations[]=$lig_champ->Collation;} $texte_info_action.="
Aucun champAucun champ VARCHAR ni CHAR
"; $nb_collations=count($tab_collations); if($nb_collations==1) { $texte_info_action.="

Un seul interclassement a été trouvé dans vos tables.
Il n'y a pas de problème d'interclassement/collation.

\n"; } elseif($nb_collations>1) { $texte_info_action.="

$nb_collations interclassements ont été trouvés dans vos tables.
Cela peut représenter un problème si deux interclassements différents sont utilisés sur une jointure de tables.
En cas de doute, signalez sur la liste de diffusion gepi-users les interclassements relevés (en indiquant sur quels champs cela se produit).

\n"; $texte_info_action.="

Voici la liste des interclassements trouvés : "; for($loop=0;$loop0) {$texte_info_action.=", ";} $texte_info_action.="$tab_collations[$loop]"; } $texte_info_action.="

"; } } $texte_info_action.="

Terminé.

"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); //===================================== echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo script_suite_submit(); //===================================== } elseif((isset($_POST['action']) AND $_POST['action'] == 'corriger_interclassements')||(isset($_GET['maj']) AND $_GET['maj'] == 'corriger_interclassements')) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Correction des interclassements (collations) :

\n"; if((isset($_GET['table']))&&(preg_match("/^[A-Za-z0-9_]*$/",$_GET['table']))) { echo "Correction de la table ".$_GET['table']." : "; $sql="ALTER TABLE `".$_GET['table']."` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(!$res) { echo "Erreur ".mysqli_error($GLOBALS["mysqli"])."
"; } else { echo "Ok"; } echo "
\n"; } else { $nb_corr=0; $r_sql = mysqli_query($GLOBALS["mysqli"], "SHOW TABLE STATUS"); while ($une_table = mysqli_fetch_array($r_sql)) { if($une_table['Collation']!="utf8_general_ci") { echo "Correction de la table ".$une_tableune_table['Name']." : "; $sql="ALTER TABLE `".$une_table['Name']."` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(!$res) { echo "Erreur ".mysqli_error($GLOBALS["mysqli"])."
"; } else { echo "Ok"; } echo "
\n"; $nb_corr++; } else { $sql="SHOW FULL COLUMNS FROM ".$une_table['Name']; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(!$res) { echo "Erreur lors de l'extraction des champs de ".$une_table['Name']."
"; } else { if(mysqli_num_rows($res)>0) { $correction_table_requise="n"; while($un_champ=mysqli_fetch_array($res)) { if ($un_champ['Collation']!='utf8_general_ci' && $un_champ['Collation']!=NULL) { $correction_table_requise="y"; break; } } if($correction_table_requise=="y") { echo "Correction de la table ".$une_table['Name']." : "; $sql="ALTER TABLE `".$une_table['Name']."` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;"; $res3=mysqli_query($GLOBALS["mysqli"], $sql); if(!$res3) { echo "Erreur ".mysqli_error($GLOBALS["mysqli"])."
"; } else { echo "Ok"; } echo "
\n"; $nb_corr++; } } } } } if($nb_corr==0) { echo "

Aucune erreur de collation n'a été trouvée.

\n"; } } } elseif ((isset($_POST['action']) AND $_POST['action'] == 'corrige_ordre_matieres_professeurs')||(isset($_POST['maj']) AND $_POST['maj'] == 'corrige_ordre_matieres_professeurs')||(isset($_GET['maj']) AND $_GET['maj'] == 'corrige_ordre_matieres_professeurs')) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; if((isset($_POST['maj']))&&($_POST['maj']=='corrige_ordre_matieres_professeurs')) { $texte_info_action="

Etape 17/$total_etapes
Vérification de l'ordre des matières des professeurs

\n"; } else { $texte_info_action="

Vérification de l'ordre des matières des professeurs

\n"; } $texte_info_action.="

Correction de l'ordre de matières des professeurs : \n"; $texte_info_action.="

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); $sql="SELECT * FROM j_professeurs_matieres ORDER BY id_professeur, ordre_matieres, id_matiere;"; //echo "$sql
\n"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)==0) { $texte_info_action="

Aucune association professeur/matière n'est enregistrée dans la table 'j_professeurs_matieres'.

\n"; } else { $texte_info_action=""; $nb_corrections=0; $nb_erreurs=0; $prof_precedent=""; while($lig=mysqli_fetch_object($res)) { if($lig->id_professeur!=$prof_precedent) { $prof_precedent=$lig->id_professeur; $tab_matiere=array(); $tab_ordre_matieres=array(); $cpt=1; } if(in_array($lig->ordre_matieres,$tab_ordre_matieres)) { $texte_info_action.="Rang $lig->ordre_matieres de matière en doublon pour $lig->id_professeur ($lig->id_matiere)
\n"; $nb_corrections++; } $tab_ordre_matieres[]=$lig->ordre_matieres; $sql="UPDATE j_professeurs_matieres SET ordre_matieres='$cpt' WHERE id_professeur='$lig->id_professeur' AND id_matiere='$lig->id_matiere';"; $update=mysqli_query($GLOBALS["mysqli"], $sql); if(!$update) {$nb_erreurs++;} $cpt++; } $texte_info_action.="

$nb_corrections correction(s) effectuée(s) avec $nb_erreurs erreur(s).

"; $texte_info_action.="

Terminé.

\n"; } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); //===================================== echo "
\n"; echo add_token_field(); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
\n"; echo script_suite_submit(); //===================================== } elseif ((isset($_POST['action']) AND $_POST['action'] == 'controle_categories_matieres')||(isset($_POST['maj']) AND $_POST['maj'] == 'controle_categories_matieres')||(isset($_GET['maj']) AND $_GET['maj'] == 'controle_categories_matieres')) { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; if((isset($_POST['maj']))&&($_POST['maj']=='controle_categories_matieres')) { $texte_info_action="

Etape 18/$total_etapes
Vérification des catégories de matières

\n"; } else { $texte_info_action="

Vérification des catégories de matières

\n"; } $texte_info_action.="

Contrôle des catégories de matières : \n"; $texte_info_action.="

\n"; $sql="SELECT id, classe FROM classes ORDER BY classe;"; //echo "$sql
\n"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)==0) { $texte_info_action.="

Aucune classe n'est enregistrée dans la table 'classes'.

\n"; } else { $nb_corrections=0; $nb_erreurs=0; $prof_precedent=""; while($lig=mysqli_fetch_object($res)) { // categorie_id=='0' pour la "catégorie" Aucune... non présente dans matieres_categories $sql="SELECT DISTINCT categorie_id, id_classe FROM j_groupes_classes jgc WHERE id_classe='$lig->id' and categorie_id!='0' AND categorie_id not in (select categorie_id from j_matieres_categories_classes where classe_id='$lig->id');"; $res2=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res2)>0) { while($lig2=mysqli_fetch_object($res2)) { $sql="SELECT id, nom_court, nom_complet, priority FROM matieres_categories WHERE id='$lig2->categorie_id'"; $res_cat=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_cat)==0) { $texte_info_action.="La catégorie n°$lig2->categorie_id associée à la classe n°$lig->id ($lig->classe) n'existe pas dans la table 'matieres_categories'.
Vous devriez revoir le paramétrage des catégories.
Une solution consiste à forcer le même paramétrage pour toutes les classes depuis la page de Gestion des matières
Sinon, vous pouvez contrôler et Enregistrer dans la page Gestion des classes/<$lig->classe>/Enseignements (voir le ou les icones ).
"; $nb_erreurs++; } else { $lig_cat=mysqli_fetch_object($res_cat); $texte_info_action.="Insertion de l'association de la catégorie de matière '$lig_cat->nom_court' ('$lig_cat->nom_complet') avec la classe ".get_class_from_id($lig->id)." : "; $sql="INSERT INTO j_matieres_categories_classes SET classe_id='$lig->id', categorie_id='$lig2->categorie_id', priority='$lig_cat->priority', affiche_moyenne='0';"; $res3=mysqli_query($GLOBALS["mysqli"], $sql); if(!$res3) { $texte_info_action.="Echec"; $nb_erreurs++; } else { $texte_info_action.="Succès"; $nb_corrections++; } $texte_info_action.="
\n"; } } } $cpt++; } } echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); $texte_info_action=""; $sql="SELECT * FROM matieres_categories WHERE id='0';"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { $lig_cat=mysqli_fetch_object($test); $texte_info_action.="

Anomalie : Une catégorie de matière '$lig_cat->nom_court' ('$lig_cat->nom_complet') a l'identifiant 0 dans la table 'matieres_categories'.
Cet identifiant est réservé à la \"catégorie\" Aucune qui sert pour les matières ne devant être dans aucune catégorie (une astuce qui permet de ne pas faire apparaitre certains enseignements sur les bulletins (demi-groupes de TP par exemple)).

\n"; $texte_info_action.="

Suppression de cette catégorie : "; $sql="DELETE FROM matieres_categories WHERE id='0';"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) {$texte_info_action.="Succès";} else {echo "Echec";} $texte_info_action.="

"; } $texte_info_action.="

$nb_corrections correction(s) effectuée(s) avec $nb_erreurs erreur(s).

"; $texte_info_action.="

Terminé.

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); // A VOIR: Faut-il mettre un correctif /* Rechercher les classes pour lesquelles les catégories sont demandées, mais pour lesquelles la table j_matieres_categories_classes est vide. SELECT display_mat_cat FROM classes WHERE id='7'; Faire alors UPDATE classes SET display_mat_cat='n' WHERE id='XXX'; et alerter. // Les modifs précédentes corrigent ce pb. $texte_info_action.="

Contrôle des classes avec affichage des catégories de matières demandé, mais sans aucun paramétrage défini dans j_matieres_categories_classes : \n"; $sql="SELECT id, classe FROM classes WHERE display_mat_cat='y' AND id NOT in (SELECT classe_id FROM j_matieres_categories_classes);"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)>0) { while($lig_cat=mysqli_fetch_object($res)) { $texte_info_action.="
Suppression de l'affichage des catégories (mal paramétré) pour la classe de $lig_cat->classe : \n"; $sql="UPDATE classes SET display_mat_cat='n' WHERE id='$lig_cat->id';"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) {$texte_info_action.="Succès";} else {echo "Echec";} } } else { $texte_info_action.="Aucune anomalie trouvée"; } $texte_info_action.="

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); */ $texte_info_action="
\n"; $texte_info_action.="

Fin de la vérification des tables

\n"; echo $texte_info_action; update_infos_action_nettoyage($id_info, $texte_info_action); if($mode_auto=="y") { echo "

Pensez à parcourir le compte-rendu de nettoyage en page d'accueil.
Il peut s'y trouver des messages et liens concernant des opérations encore à effectuer, mais requérant un choix de votre part (donc non effectuée automatiquement ici).

\n"; } } elseif (isset($_POST['action']) AND $_POST['action'] == 'vidage_mod_discipline') { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Vidage des tables du module Discipline : \n"; $tab_table=array(//"s_alerte_mail", "s_avertissements", "s_autres_sanctions", "s_communication", "s_exclusions", "s_incidents", "s_protagonistes", "s_retenues", "s_sanctions", "s_traitement_incident", "s_travail"); for($i=0;$i0) {echo ", ";} echo $tab_table[$i]; $sql="TRUNCATE TABLE $tab_table[$i];"; //echo "$sql
\n"; $suppr=mysqli_query($GLOBALS["mysqli"], $sql); } echo "

\n"; echo "

Recherche et suppression des documents (travaux, punitions,...) joints aux incidents et sanctions :
\n"; $dossier_documents_discipline="documents/discipline"; if(((isset($multisite))&&($multisite=='y'))||(getSettingValue('multisite')=='y')) { if(isset($_COOKIE['RNE'])) { $dossier_documents_discipline.="_".$_COOKIE['RNE']; if(!file_exists("../$dossier_documents_discipline")) { @mkdir("../$dossier_documents_discipline",0770); } } } $handle=opendir('../'.$dossier_documents_discipline); $nb_suppr=0; $nb_err=0; while ($file = readdir($handle)) { if (($file != '.') and ($file != '..') and ($file != 'remove.txt') and ($file != '.htaccess') and ($file != '.htpasswd') and ($file != 'index.html') and ($file != '.test') // Les tests précédents sont inutiles avec ce qui suit, mais les conserver permet de ne pas oublier des pièges en cas de modif and(preg_match('/^incident_/', $file))) { if(deltree('../'.$dossier_documents_discipline."/".$file, true)) { $nb_suppr++; } else { $nb_err++; } } } closedir($handle); echo "$nb_suppr suppression(s) de dossiers d'incidents.
"; echo "$nb_err erreur(s) de suppression."; echo "

\n"; echo "

Terminé.

\n"; } elseif (isset($_POST['action']) AND $_POST['action'] == 'vidage_mod_discipline_date') { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; $date_limite=isset($_POST['date_limite']) ? $_POST['date_limite'] : NULL; if((!isset($date_limite))||($date_limite=="")) { echo "

Suppression d'incidents impossible&nbp;: date invalide.

"; } elseif(!preg_match("#^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$#", $date_limite)) { echo "

Suppression d'incidents impossible&nbp;: date '$date_limite' invalide.

"; } else { echo "

Suppression des incidents, sanctions, avertissements pour une date antérieure à ".$date_limite." :
\n"; $mysql_date_limite=get_mysql_date_from_slash_date($date_limite, "n"); $mod_disc_terme_incident=getSettingValue('mod_disc_terme_incident'); if($mod_disc_terme_incident=="") {$mod_disc_terme_incident="incident";} $mod_disc_terme_sanction=getSettingValue('mod_disc_terme_sanction'); if($mod_disc_terme_sanction=="") {$mod_disc_terme_sanction="sanction";} $mod_disc_terme_avertissement_fin_periode=getSettingValue('mod_disc_terme_avertissement_fin_periode'); if($mod_disc_terme_avertissement_fin_periode=="") {$mod_disc_terme_avertissement_fin_periode="avertissement de fin de période";} $sql="SELECT * FROM s_travail WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));"; //echo "$sql
\n"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)>0) { echo mysqli_num_rows($res)." travaux à faire : "; $sql="DELETE FROM s_travail WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));"; //echo "$sql
\n"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) { echo " supprimés
"; } else { echo " erreur lors de la suppression
"; } } $sql="SELECT * FROM s_retenues WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));"; //echo "$sql
\n"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)>0) { echo mysqli_num_rows($res)." retenues : "; $sql="DELETE FROM s_retenues WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));"; //echo "$sql
\n"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) { echo " supprimées
"; } else { echo " erreur lors de la suppression
"; } } $sql="SELECT * FROM s_exclusions WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));"; //echo "$sql
\n"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)>0) { echo mysqli_num_rows($res)." exclusions : "; $sql="DELETE FROM s_exclusions WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));"; //echo "$sql
\n"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) { echo " supprimées
"; } else { echo " erreur lors de la suppression
"; } } $sql="SELECT * FROM s_autres_sanctions WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));"; //echo "$sql
\n"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)>0) { echo mysqli_num_rows($res)." autres ".$mod_disc_terme_sanction."s : "; $sql="DELETE FROM s_autres_sanctions WHERE id_sanction in (SELECT id_sanction FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."'));"; //echo "$sql
\n"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) { echo " supprimées
"; } else { echo " erreur lors de la suppression
"; } } $sql="SELECT * FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."');"; //echo "$sql
\n"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)>0) { echo "Soit en tout ".mysqli_num_rows($res)." ".$mod_disc_terme_sanction."s : "; $sql="DELETE FROM s_sanctions WHERE id_incident IN (SELECT id_incident FROM s_incidents WHERE date<='".$mysql_date_limite."');"; //echo "$sql
\n"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) { echo " supprimées
"; } else { echo " erreur lors de la suppression
"; } } $sql="SELECT * FROM s_incidents WHERE date<='".$mysql_date_limite."';"; //echo "$sql
\n"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)>0) { echo "Soit ".mysqli_num_rows($res)." ".$mod_disc_terme_incident."s : "; $sql="DELETE FROM s_incidents WHERE date<='".$mysql_date_limite."';"; //echo "$sql
\n"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) { echo " supprimés
"; } else { echo " erreur lors de la suppression
"; } } $sql="SELECT 1=1 FROM s_avertissements WHERE date_avertissement<='".$mysql_date_limite." 00:00:00';"; //echo "$sql
\n"; $res=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res)>0) { echo mysqli_num_rows($res)." ".$mod_disc_terme_avertissement_fin_periode."s : "; $sql="DELETE FROM s_avertissements WHERE date_avertissement<='".$mysql_date_limite." 00:00:00';"; //echo "$sql
\n"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) { echo " supprimés
"; } else { echo " erreur lors de la suppression
"; } } echo "

Terminé.

\n"; } } elseif (isset($_POST['action']) AND $_POST['action'] == 'nettoyage_mod_discipline') { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Nettoyage des tables du module Discipline :
\n"; $cpt_nettoyage=0; //insert into s_traitement_incident set login_ele='titi', id_incident='4'; $sql="select * from s_traitement_incident str where str.login_ele not in (select login from s_protagonistes spr where spr.id_incident=str.id_incident);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { echo mysqli_num_rows($test)." protagonistes dans un traitement d'incident ne correspondent à aucun protagoniste d'incident : "; $nb_err=0; $nb_suppr=0; while($lig_tmp=mysqli_fetch_object($test)) { $sql="delete from s_traitement_incident where id_incident='$lig_tmp->id_incident' and login_ele='$lig_tmp->login_ele';"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) {$nb_suppr++;} else {$nb_err++;} } if($nb_err==0) { echo "nettoyés"; $cpt_nettoyage+=mysqli_num_rows($test); } else { echo "$nb_suppr nettoyés, $nb_err erreur lors du nettoyage"; } echo "
\n"; } //insert into s_sanctions set login='toto', id_incident='4'; $sql="select * from s_sanctions san where san.login not in (select login from s_protagonistes spr where spr.id_incident=san.id_incident);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { echo mysqli_num_rows($test)." protagonistes dans une sanction ne correspondent à aucun protagoniste d'incident : "; $nb_err=0; $nb_suppr=0; while($lig_tmp=mysqli_fetch_object($test)) { $sql="delete from s_sanctions where id_incident='$lig_tmp->id_incident' and login='$lig_tmp->login';"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) {$nb_suppr++;} else {$nb_err++;} } if($nb_err==0) { echo "nettoyés"; $cpt_nettoyage+=mysqli_num_rows($test); } else { echo "$nb_suppr nettoyés, $nb_err erreur lors du nettoyage"; } echo "
\n"; } $sql="select * from s_traitement_incident where id_incident not in (select id_incident from s_incidents);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { echo mysqli_num_rows($test)." traitements ne correspondent à aucun incident : "; $sql="delete from s_traitement_incident where id_incident not in (select id_incident from s_incidents);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) { echo "nettoyés"; $cpt_nettoyage+=mysqli_num_rows($test); } else { echo "erreur lors du nettoyage"; } echo "
\n"; } $sql="select * from s_protagonistes where id_incident not in (select id_incident from s_incidents);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { echo mysqli_num_rows($test)." protagonistes ne correspondent à aucun incident : "; $sql="delete from s_protagonistes where id_incident not in (select id_incident from s_incidents);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) { echo "nettoyés"; $cpt_nettoyage+=mysqli_num_rows($test); } else { echo "erreur lors du nettoyage"; } echo "
\n"; } $sql="select * from s_sanctions where id_incident not in (select id_incident from s_incidents);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { echo mysqli_num_rows($test)." sanctions ne correspondent à aucun incident : "; $sql="delete from s_sanctions where id_incident not in (select id_incident from s_incidents);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) { echo "nettoyés"; $cpt_nettoyage+=mysqli_num_rows($test); } else { echo "erreur lors du nettoyage"; } echo "
\n"; } $tab_sanction=array("s_exclusions","s_retenues","s_travail","s_autres_sanctions"); $tab_txt_sanction=array("exclusions","retenues","travaux","autres sanctions"); for($loop=0;$loop0) { echo mysqli_num_rows($test)." ".$tab_txt_sanction[$loop]." ne correspondent à aucune sanction : "; $sql="delete from s_sanctions where id_incident not in (select id_incident from s_incidents);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) { echo "nettoyés"; $cpt_nettoyage+=mysqli_num_rows($test); } else { echo "erreur lors du nettoyage"; } echo "
\n"; } } if($cpt_nettoyage==0) {echo "Aucune scorie n'a été trouvée.";} echo "

\n"; echo "

Terminé.

\n"; } elseif (isset($_POST['action']) AND $_POST['action'] == 'nettoyage_cdt') { echo "

Retour Retour accueil "; echo "| Retour page Vérification / Nettoyage des tables\n"; echo "

\n"; echo "

Nettoyage des tables du cahier de textes :
\n"; if(!isset($_POST['confirmer_nettoyage_cdt'])) { $cpt_scories=0; $sql="select * from ct_entry where id_groupe not in (select id FROM groupes);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { echo mysqli_num_rows($test)." compte-rendu(s) de séance(s) pour un ou des groupes n'existant plus a(ont) été trouvé(s).
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; $alt=1; while($lig=mysqli_fetch_object($test)) { $alt=$alt*(-1); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; $cpt_scories++; } echo "
DateProfesseurContenu
".strftime("%d/%m/%Y", $lig->date_ct)."".civ_nom_prenom($lig->id_login)."".$lig->contenu."
\n"; } else { echo "Aucun défaut d'association à un enseignement n'a été trouvé dans 'ct_entry'.
\n"; } $sql="select * from ct_documents where id_ct not in (select id_ct FROM ct_entry);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { echo mysqli_num_rows($test)." document(s) joint(s) ne correspond(ent) à aucun compte-rendu existant.
\n"; } $sql="select * from ct_devoirs_entry where id_groupe not in (select id FROM groupes);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { echo mysqli_num_rows($test)." notice(s) de devoir(s) pour un ou des groupes n'existant plus a(ont) été trouvé(s).
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; $alt=1; while($lig=mysqli_fetch_object($test)) { $alt=$alt*(-1); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; $cpt_scories++; } echo "
DateProfesseurContenu
".strftime("%d/%m/%Y", $lig->date_ct)."".civ_nom_prenom($lig->id_login)."".$lig->contenu."
\n"; } else { echo "Aucun défaut d'association à un enseignement n'a été trouvé dans 'ct_devoirs_entry'.
\n"; } $sql="select * from ct_devoirs_documents where id_ct_devoir not in (select id_ct FROM ct_devoirs_entry);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { echo mysqli_num_rows($test)." document(s) joint(s) ne correspond(ent) à aucune notice de devoir existante.
\n"; } $sql="select * from ct_private_entry where id_groupe not in (select id FROM groupes);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { echo mysqli_num_rows($test)." notice(s) privée(s) pour un ou des groupes n'existant plus a(ont) été trouvé(s).
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; $alt=1; while($lig=mysqli_fetch_object($test)) { $alt=$alt*(-1); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; $cpt_scories++; } echo "
DateProfesseurContenu
".strftime("%d/%m/%Y", $lig->date_ct)."".civ_nom_prenom($lig->id_login)."".$lig->contenu."
\n"; } else { echo "Aucun défaut d'association à un enseignement n'a été trouvé dans 'ct_private_entry'.
\n"; } $sql="select id from ct_sequences;"; $res_seq=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_seq)>0) { $tab_seq=array(); while($lig_seq=mysqli_fetch_object($res_seq)) { $tab_seq[]=$lig_seq->id; } $tab_seq2=array(); $sql="(select id_sequence FROM ct_entry) UNION (select id_sequence FROM ct_devoirs_entry) UNION (select id_sequence FROM ct_private_entry);"; $res_seq=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_seq)>0) { while($lig_seq=mysqli_fetch_object($res_seq)) { $tab_seq2[]=$lig_seq->id_sequence; } } for($loop=0;$loop\n"; $cpt_scories++; } } } else { echo "Aucune séquence n'est saisie.
\n"; } if($cpt_scories>0) { echo "

\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "\n"; echo "
\n"; } } else { $cpt_nettoyage=0; $sql="select * from ct_entry where id_groupe not in (select id FROM groupes);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { echo "Suppression de ".mysqli_num_rows($test)." compte-rendu(s) de séance(s) pour un ou des groupes n'existant plus : "; $sql="DELETE FROM ct_entry where id_groupe not in (select id FROM groupes);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) { echo "OK"; $cpt_nettoyage+=mysqli_num_rows($test); } else { echo "ERREUR"; } echo "
\n"; } else { echo "Aucune défaut d'association à un enseignement n'a été trouvé dans 'ct_entry'.
\n"; } $sql="select * from ct_documents where id_ct not in (select id_ct FROM ct_entry);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { $nb_err=0; echo "Suppression de ".mysqli_num_rows($test)." document(s) joint(s) ne correspondant à aucun compte-rendu existant : \n"; /* $sql="DELETE FROM ct_documents where id_groupe not in (select id FROM groupes);"; $del=mysql_query($sql); if($del) { echo "OK"; } else { echo "ERREUR"; } */ while($lig=mysqli_fetch_object($test)) { if(file_exists($lig->emplacement)) { @unlink($lig->emplacement); } $sql="DELETE FROM ct_documents WHERE id_ct='$lig->id_ct';"; if(!$del) { $nb_err++; } else { $cpt_nettoyage++; } } if($nb_err==0) { echo "OK"; } else { echo "ERREUR"; } echo "
\n"; } $sql="select * from ct_devoirs_entry where id_groupe not in (select id FROM groupes);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { echo mysqli_num_rows($test)." notice(s) de devoir(s) pour un ou des groupes n'existant plus a(ont) été trouvé(s).
\n"; echo "Suppression de ".mysqli_num_rows($test)." notice(s) de devoir(s) pour un ou des groupes n'existant plus : "; $sql="DELETE FROM ct_devoirs_entry where id_groupe not in (select id FROM groupes);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) { echo "OK"; $cpt_nettoyage+=mysqli_num_rows($test); } else { echo "ERREUR"; } echo "
\n"; } else { echo "Aucune défaut d'association à un enseignement n'a été trouvé dans 'ct_devoirs_entry'.
\n"; } $sql="select * from ct_devoirs_documents where id_ct_devoir not in (select id_ct FROM ct_devoirs_entry);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { $nb_err=0; echo "Suppression de ".mysqli_num_rows($test)." document(s) joint(s) ne correspondant à aucune notice de devoir existante : \n"; /* $sql="DELETE FROM ct_devoirs_documents where id_groupe not in (select id FROM groupes);"; $del=mysql_query($sql); if($del) { echo "OK"; } else { echo "ERREUR"; } */ while($lig=mysqli_fetch_object($test)) { if(file_exists($lig->emplacement)) { @unlink($lig->emplacement); } $sql="DELETE FROM ct_devoirs_documents WHERE id_ct='$lig->id_ct';"; if(!$del) { $nb_err++; } else { $cpt_nettoyage++; } } if($nb_err==0) { echo "OK"; } else { echo "ERREUR"; } echo "
\n"; } $sql="select * from ct_private_entry where id_groupe not in (select id FROM groupes);"; $test=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($test)>0) { echo "Suppression de ".mysqli_num_rows($test)." notice(s) privée(s) pour un ou des groupes n'existant plus : "; $sql="DELETE FROM ct_private_entry where id_groupe not in (select id FROM groupes);"; $del=mysqli_query($GLOBALS["mysqli"], $sql); if($del) { echo "OK"; $cpt_nettoyage+=mysqli_num_rows($test); } else { echo "ERREUR"; } echo "
\n"; } else { echo "Aucune défaut d'association à un enseignement n'a été trouvé dans 'ct_private_entry'.
\n"; } $sql="select id from ct_sequences;"; $res_seq=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_seq)>0) { $tab_seq=array(); while($lig_seq=mysqli_fetch_object($res_seq)) { $tab_seq[]=$lig_seq->id; } $tab_seq2=array(); $sql="(select id_sequence FROM ct_entry) UNION (select id_sequence FROM ct_devoirs_entry) UNION (select id_sequence FROM ct_private_entry);"; $res_seq=mysqli_query($GLOBALS["mysqli"], $sql); if(mysqli_num_rows($res_seq)>0) { while($lig_seq=mysqli_fetch_object($res_seq)) { $tab_seq2[]=$lig_seq->id_sequence; } } for($loop=0;$loopOK"; $cpt_nettoyage++; } else { echo "ERREUR"; } echo "
\n"; } } } else { echo "Aucune séquence n'est saisie.
\n"; } } echo "

Terminé.

\n"; } else { echo "

Retour Retour accueil "; //echo "| Retour page Vérification / Nettoyage des tables

\n"; echo "

\n"; echo "

Sauvegarde préalable

\n"; echo "
\n"; echo "

Il est très vivement conseillé de faire une sauvegarde de la base MySql avant de lancer la procédure.

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "

Il est également vivement conseillé de désactiver les connexions à GEPI durant la phase de nettoyage.

Attention : selon la taille de la base, cette opération peut durer plusieurs heures.

\n"; echo "
\n"; echo "
\n"; echo "

Bloc adresse des bulletins HTML et Fiches Bienvenue HTML

"; echo "

Contrôler les paramétrages aberrants pour un format A4 ou un un format A3

"; if(isset($_GET['check_param_bloc_adresse_html'])) { if($_GET['check_param_bloc_adresse_html']=='a4') { echo "

Contrôle des paramètres pour la version A4 :

"; $retour_check=check_param_bloc_adresse_html('a4'); } else { echo "

Contrôle des paramètres pour la version A3 :

"; $retour_check=check_param_bloc_adresse_html('a3'); } if($retour_check=='') { echo "

"; echo "Pas de valeur aberrante trouvée."; } else { echo "

"; echo "".$retour_check; } echo "

"; } echo "

NOTE : Le bloc adresse des responsables d'un élève est positionné dans les bulletins HTML et Fiches Bienvenue avec les mêmes paramètres.
Ils sont définis dans la page Paramètres d'impression des bulletins

\n"; echo "
\n"; //==================================================== echo "

Nettoyages

\n"; echo "
\n"; echo "

Cette procédure opère un nettoyage des lignes inutiles dans les tables de liaison de la base MySql de GEPI et dans les tables des données scolaires des élèves (notes, appréciations, absences)."; echo "
Les tables de liaison contiennent des informations qui mettent en relation les tables principales de GEPI (élèves, professeurs, matières, classes).

Du fait de bugs mineurs (éventuellement déjà réglés mais présents dans des versions antérieures de GEPI) ou de mauvaises manipulations, ces tables de liaison peuvent contenir des données obsolètes ou des doublons qui peuvent nuire à un fonctionnement optimal de GEPI."; echo "

\n"; echo add_token_field(); echo "

Cliquez sur le bouton suivant pour commencer le nettoyage des tables de la base

\n"; echo "

Cette procédure s'effectue en plusieurs étapes : à chaque étape, une page affiche le compte-rendu du nettoyage et un bouton situé en bas de la page vous permet de passer à l'étape suivante.

\n"; echo "
\n"; echo "

\n"; echo "
\n"; echo "\n"; echo "

\n"; echo "\n"; echo "\n"; echo "
\n"; echo "

Ou n'effectuer que certains des nettoyages de la liste :
\n"; echo "Tables AID, j_eleves_etablissements, j_eleves_regime et j_professeurs_matieres
\n"; echo "Table j_eleves_professeurs (associations élèves/".getSettingValue('gepi_prof_suivi').")
\n"; echo "Table j_eleves_classes (inscription des élèves dans les classes pour chaque période)
\n"; echo "Tables aid_appreciations et avis_conseil_classe
\n"; echo "Table matieres_appreciations (appréciations des élèves sur les bulletins)
\n"; echo "Table matieres_notes (notes des élèves sur les bulletins)
\n"; echo "Tables concernant les groupes (associations élèves/enseignements/périodes/classes)
\n"; echo "Tables concernant les comptes élèves et responsables
\n"; echo "Tables concernant les grilles PDF.
\n"; echo "Supprimer les adresses responsables non associées
\n"; echo "Supprimer les engagements incohérents (élèves partis, ou association avec une classe dans laquelle l'élève n'est pas/plus inscrit)
\n"; echo "Supprimer les scories de Dates événements classes attachés à des classes qui n'existent plus
\n"; echo "
Contrôle des tables j_eleves_cpe, j_eleves_professeurs et j_scol_classes.
\n"; echo "Vérification des interclassements (collation,...).
\n"; echo "Vérification de l'ordre des matières pour les professeurs.
\n"; echo "Vérification des catégories de matières.
\n"; //echo "A DETAILLER..."; echo "

\n"; echo "
\n"; echo "

Nettoyages complémentaires

\n"; echo "

Il est arrivé que des élèves puissent être inscrits à des groupes sur des périodes où ils ne sont plus dans la classe (suite à des changements de classes, départs,... par exemple).
Il en résulte des affichages d'erreur non fatales, mais disgracieuses.
Le problème n'est normalement plus susceptible de revenir, mais dans le cas où vous auriez des erreurs inexpliquées concernant /lib/groupes.inc.php, vous pouvez contrôler les appartenances aux groupes/classes en visitant la page suivante:

\n"; //echo "

Contrôler les appartenances d'élèves à des groupes/classes.

\n"; echo "
\n"; echo "
\n"; echo "
\n"; //=================================================== // Anomalies sso_table_correspondance: // Il y a un index sur login_gepi, mais pas sur login_sso $sql="SELECT DISTINCT login_sso FROM sso_table_correspondance WHERE login_gepi!='' AND login_sso!='' AND login_gepi IN (SELECT login FROM utilisateurs) GROUP BY login_sso HAVING COUNT(login_sso)>'1';"; $res=mysqli_query($GLOBALS["mysqli"], $sql); $nb_scories=mysqli_num_rows($res); if($nb_scories>0) { echo "

ANOMALIE : Vous avez ".$nb_scories." identifiant(s) ENT associés à plusieurs logins Gepi dans la table 'sso_table_correspondance'.
Cela ne devrait pas arriver.
Contrôlez les associations et supprimez celles qui sont en trop.

Voici les comptes en collision :

".add_token_field()." "; $cpt=0; while($lig=mysqli_fetch_object($res)) { $sql="SELECT * FROM utilisateurs u, sso_table_correspondance stc WHERE u.login=stc.login_gepi AND stc.login_sso='".$lig->login_sso."';"; $res2=mysqli_query($GLOBALS["mysqli"], $sql); while($lig2=mysqli_fetch_object($res2)) { echo " "; $cpt++; } } echo "
Nom Prénom Statut Login Gepi Identifiant ENT
login_gepi."|".$lig2->login_sso."\" onchange=\"checkbox_change(this.id)\" />

"; } //=================================================== echo "
\n"; //echo "

Jusqu'à la version 1.4.3-1, GEPI a comporté un bug sur le calcul des moyennes de conteneurs (boites/sous-matières).
\nSi on déplaçait un devoir ou un conteneur vers un autre conteneur, il pouvait se produire une absence de recalcul des moyennes de certains conteneurs.
\nLe problème est désormais corrigé, mais dans le cas où vos moyennes ne sembleraient pas correctes, vous pouvez provoquer le recalcul des moyennes de l'ensemble des conteneurs pour l'ensemble des groupes/matières.
\nLes modifications effectuées seront affichées.

\n"; echo "

Jusqu'à la version 1.4.3-1, GEPI a comporté un bug sur le calcul des moyennes de conteneurs (".getSettingValue("gepi_denom_boite")."s).
\nSi on déplaçait un devoir ou un conteneur vers un autre conteneur, il pouvait se produire une absence de recalcul des moyennes de certains conteneurs.
\nLe problème est désormais corrigé, mais dans le cas où vos moyennes ne sembleraient pas correctes, vous pouvez provoquer le recalcul des moyennes de l'ensemble des conteneurs pour l'ensemble des groupes/matières.
\nLes modifications effectuées seront affichées.

\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "

La procédure de sauvegarde avec la commande 'mysqldump' dans la version 1.4.4-stable contenait un bug aboutissant à la perte de la fonction auto_increment sur certains champs, ce qui peut aboutir très rapidement à des incohérences dans la base de données.

\n"; echo "

Si vous avez restauré une sauvegarde générée avec la méthode mysqldump, vous devez absolument lancer cette vérification le plus rapidement possible et corriger les erreurs si le script ne peut les corriger automatiquement.

\n"; echo "

Il est vivement recommandé de faire une sauvegarde de la base avant d'effectuer cette opération !

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "

Gepi a un temps contenu un bug sur le format des login.
La présence de 'point' dans un nom de login par exemple pouvait provoquer des dysfonctionnements.
Le contenu des tables 'j_eleves_cpe', 'j_eleves_professeurs' et 'j_scol_classes' pouvait être affecté.

\n"; echo "

Il est vivement recommandé de faire une sauvegarde de la base avant d'effectuer cette opération !

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "

Vérification de l'Emploi du temps.

\n"; echo "Pour vérifier votre emploi du temps en cas d'anomalies, suivez ce lien : Vérification de l'Emploi du temps

\n"; echo "
\n"; echo "

Contrôle de l'interclassement (COLLATION) des champs des tables.
Des interclassements différents sur des champs de deux tables intervenant dans une jointure peut provoquer des erreurs.
Un tel problème peut survenir avec des bases transférées d'une machine à une autre,...

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "

Correction des interclassements (COLLATION) des champs des tables.
Si des anomalies ont été relevées lors d'un contrôle des interclassements, vous pouvez effectuer une correction :
Elle consistera à forcer l'interclassement 'utf8_general_ci' sur les tables Gepi.

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "

Contrôle des ordres de matières pour les professeurs.
Si les ordres de matières ne sont pas correctement renseignés dans la table j_professeurs_matieres (ordre_matieres tous à zéro par exemple), il n'est pas possible de choisir la matière principale d'un professeur.

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "

Contrôle catégories de matières.
Si les vous n'obtenez aucune matière dans les relevés de notes quand les Catégories de matières sont cochées dans 'Gestion des bases/Gestion des classes/<Une_classe> Paramètres', les informations de la table 'j_matieres_categories_classes' sont probablement incomplètes.

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "

Nettoyage de scories dans le module Discipline.

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "

Nettoyage de scories dans les cahiers de textes.

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "
\n"; echo "
\n"; //==================================================== echo "\n"; echo "

Nettoyage par le vide;) au changement d'année

\n"; echo "
\n"; echo "

Au changement d'année, il est recommandé de vider les entrées des tables 'edt_classes', 'edt_cours', 'edt_calendrier' du module emploi du temps de Gepi.

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "

NOTE : Prenez soin de faire une sauvegarde de la base et un archivage des données antérieures avant le changement d'année.

\n"; echo "
\n"; echo "
\n"; echo "

Au changement d'année, il est recommandé de vider les entrées des tables 'absences_rb', 'absences_repas' et 'absences_eleves' du module abs1 de Gepi, ainsi que les tables a_agregation_decompte, a_notifications, a_saisies, a_saisies_version, a_traitements du module abs2 :

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; //include("../lib/calendrier/calendrier.class.php"); //$cal = new Calendrier("form_suppr_abs", "date_limite"); $annee=strftime("%Y"); $mois=strftime("%m"); if($mois<=7) {$annee--;} echo "pour les absences antérieures au \n"; //echo "get_strPopup('../lib/calendrier/pop.calendrier.php', 350, 170)."\">\"Petit"; echo img_calendrier_js("date_limite", "img_bouton_date_limite"); echo "
\n"; echo "\n"; echo "

NOTE : Prenez soin de faire une sauvegarde de la base et un archivage des données antérieures avant le changement d'année.

\n"; echo "
\n"; echo "
\n"; echo "

Au changement d'année, il est recommandé de vider les entrées des tables du module Discipline de Gepi.

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "
\n"; echo "\n"; echo "

NOTES :

\n"; echo "
\n"; echo "
\n"; echo "

Dans le cas où des incidents, sanctions, avertissements n'auraient pas été supprimés au changement d'année, vous pouvez en effectuer la suppression pour tout ce qui est antérieur à une date choisie.

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; $annee=strftime("%Y"); $mois=strftime("%m"); if($mois<=7) {$annee--;} echo "Pour les incidents,... antérieurs au \n"; echo img_calendrier_js("date_limite_disc", "img_bouton_date_limite_disc")."
"; echo "\n"; echo "
\n"; echo "\n"; echo "
\n"; echo "
\n"; echo "

Au changement d'année, il faut archiver les Cahiers de Textes, puis le vider.

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "
\n"; echo "\n"; echo "

NOTES :

\n"; echo "
\n"; echo "
\n"; echo "

Vider les tables temporaires utilisées lors de l'initialisation de l'année, lors de l'archivage des cahiers de textes en fin d'année, lors de l'import des absences depuis un XML de Sconet,...
Ces tables peuvent prendre inutilement de la place lorsque vous faites une sauvegarde.
En revanche, évitez de les vider lorsqu'une opération d'initialisation, archive, import,... est en cours (vous perturberiez cette opération).

\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; echo "
\n"; echo "\n"; echo "
\n"; //=================================================================== echo "
\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; $annee=strftime("%Y"); $mois=strftime("%m"); if($mois<=7) {$annee--;} echo " antérieurs au \n"; echo img_calendrier_js("date_limite_cl", "img_bouton_date_limite_cl"); echo "
\n"; echo "\n"; echo "
\n"; //=================================================================== echo "
\n"; echo "
\n"; echo add_token_field(); echo "
\n"; echo "\n"; $annee=strftime("%Y"); $mois=strftime("%m"); if($mois<=7) {$annee--;} echo " antérieurs au \n"; echo img_calendrier_js("date_limite_cti", "img_bouton_date_limite_cti"); echo "
\n"; echo "\n"; echo "
\n"; //=================================================================== echo "
\n"; //echo "
\n"; //==================================================== } echo "


\n"; require("../lib/footer.inc.php"); ?>